
Я пытаюсь настроить домашний VPN перед поездкой на праздники.
У меня есть сервер OpenVPN, использующий настройку TAP, который успешно работает, и я могу подключиться к нему с помощью клиента.
Однако у меня возникли проблемы с маршрутизацией клиентского трафика через него.
У меня эта redirect-gateway
опция не работает. Пока что я отказываюсь от нее и пытаюсь настроить маршруты вручную.
Мой подход заключался в том, чтобы сначала запустить DHCP-клиент (dhcpcd) на интерфейсе tap, а затем попытаться добавить маршруты вручную.
# dhcpcd tap0
dhcpcd-9.4.1 starting
...
tap0: rebinding lease of 192.168.1.137
tap0: probing address 192.168.1.137/24
tap0: leased 192.168.1.137 for 86400 seconds
tap0: adding route to 192.168.1.0/24
forked to background, child pid 11185
Маршруты, которые устанавливает клиент DHCP, отлично работают для внутренних IP-адресов. Я могу пинговать/ssh-компьютеры в своей домашней сети. Я тестирую это с помощью привязанного сотового соединения.
# ip route
default via 192.168.149.13 dev wlan0 proto dhcp src 192.168.149.193 metric 600
192.168.1.0/24 dev tap0 proto dhcp scope link src 192.168.1.137 metric 1052
192.168.149.0/24 dev wlan0 proto kernel scope link src 192.168.149.193 metric 600
# ping 192.168.1.136 # another IP on my network
PING 192.168.1.136 (192.168.1.136) 56(84) bytes of data.
64 bytes from 192.168.1.136: icmp_seq=1 ttl=64 time=104 ms
64 bytes from 192.168.1.136: icmp_seq=2 ttl=64 time=83.5 ms
...
Если я вручную добавлю IP-маршруты для интернет-хостов, используя IP-адрес шлюза моей домашней сети, я смогу получить к ним доступ через OpenVPN.
(обратите внимание, что 175.55.55.55 — это мое привязанное сотовое соединение, а 72.33.33.33 — мой домашний IP)
# curl -4 https://icanhazip.com
175.55.55.55
# host -t a icanhazip.com
icanhazip.com has address 104.18.115.97
icanhazip.com has address 104.18.114.97
# ip route add 104.18.115.97 via 192.168.1.1
# ip route add 104.18.114.97 via 192.168.1.1
# curl -4 https://icanhazip.com
72.33.33.33
Проблема в том, что я не знаю, как это обобщить на весь трафик.
Я попытался добавить маршруты для передачи трафика через VPN:
# ip route add 0.0.0.0/1 via 192.168.1.1 dev tap0
# ip route add 128.0.0.0/1 via 192.168.1.1 dev tap0
Когда я снова пытаюсь зайти на icanhazip.com, время ожидания истекает, а в журналах клиента OpenVPN появляется следующая запись:
2022-12-15 15:27:38 us=127602 Recursive routing detected, drop tun packet to [AF_INET]72.33.33.33:2445
2022-12-15 15:27:38 us=122602 Recursive routing detected, drop tun packet to [AF_INET]72.33.33.33:2445
2022-12-15 15:27:38 us=147702 Recursive routing detected, drop tun packet to [AF_INET]72.33.33.33:2445
Я могу предоставить журнал или конфигурации клиента (или сервера), если это поможет, но я думаю, что это, скорее всего, проблема маршрутизации.
решение1
О, конечно.
@TomYan помог мне разобраться.
Клиент OpenVPN взаимодействовал с сервером OpenVPN через wlan0
устройство.
Когда я переопределил wlan0
маршрут как маршрут по умолчанию (или фактически по умолчанию, используя адреса 0.0.0.0/1
и 128.0.0.0/1
) и попытался отправить весь трафик через tap0
устройство VPN, это включало и трафик OpenVPN.
Сообщение о «рекурсивной маршрутизации» действительно было верным.
Если бы я использовал TCP, я бы, вероятно, заметил проблему раньше, поскольку соединение просто бы прервалось по тайм-ауту, как только я бы указал эти маршруты.
Решение состоит в том, чтобы явно добавить маршрут с одним адресом, который позволит клиенту OpenVPN по-прежнему подключаться к серверу.
Итак, сразу после DHCP маршруты имеют:
# ip route
default via 192.168.149.13 dev wlan0 proto dhcp src 192.168.149.193 metric 600
192.168.1.0/24 dev tap0 proto dhcp scope link src 192.168.1.137 metric 1052
192.168.149.0/24 dev wlan0 proto kernel scope link src 192.168.149.193 metric 600
Мой адрес сервера OpenVPN — 72.33.33.33
, поэтому я вручную добавлю к нему маршрут через шлюз wlan0, упомянутый в настройках по умолчанию выше:
# ip route add 72.33.33.33 via 192.168.149.13 dev wlan0
И теперь мои два маршрута-перехватчика будут работать:
# ip route add 0.0.0.0/1 via 192.168.1.1 dev tap0
# ip route add 128.0.0.0/1 via 192.168.1.1 dev tap0
# curl -4 https://icanhazip.com
73.33.33.33