У меня настроена сеть: маршрутизатор и RPI, который действует как точка доступа Wi-Fi, серверы DHCP и DNS, межсетевой экран и шлюз. RPI также связан с клиентом OpenVpn с платным VPN-сервисом (NordVPN), поэтому все клиенты WiFi используют VPN-соединение.
Я пытаюсь создать частный VPN, чтобы я мог подключаться к RPI извне. Для этого я запускаю VPN-сервер на RPI. NordVPN не обеспечивает переадресацию портов, поэтому я не могу подключиться к RPI через IP-адрес NordVPN и пытаюсь получить RPI с общедоступного IP-адреса интернет-провайдера. Я настроил переадресацию порта с маршрутизатора на локальный IP-адрес RPI.
Я могу подключиться с помощью частной VPN к RPI, когда соединение NordVPN отключено, но я не могу подключиться, когда соединение NordVPN работает.
Я прочитал, что проблема заключается в маршрутизации, поэтому я настроил ее, и максимальный достигнутый результат заключается в том, что я могу использовать SSH извне с RPI, когда соединение NordVPN работает, но я не могу подключиться к своему клиенту OpenVPN (с запущенным NordVPN) . Проблема в том, что клиент и сервер не завершают рукопожатие. Сервер получает первый пакет (я думаю, с брандмауэром все в порядке), но он не может отправить ответ (или отправить по неправильному маршруту). Но похоже, что эта проблема не связана с SSH-соединением, потому что оно работает извне (и я предполагаю, что сервер отвечает на рукопожатие клиента).
Другая информация:
Во-первых, после Вот, Я пробовал перенаправить с маршрутизатора на 192.168.1.117 с этими маршрутами на RPI.
ip rule add fwmark 65 table novpn
ip route add default via 192.168.1.1 dev eth0 table novpn
iptables -t mangle -A OUTPUT -p udp --sport 1234567 -j MARK --set-mark 65
В этом случае мне удалось подключиться только через частный VPN без запуска NordVPN.
Во-вторых, после Вот, Я создал виртуальный интерфейс eth0 (192.168.1.118). Я перенаправил с маршрутизатора на этот новый адрес и настроил маршруты следующим образом:
ip addr add 192.168.1.118 dev eth0:0
ip rule add from 192.168.1.118 table 1234
ip route add default via 192.168.1.1 dev eth0:0 table 1234
Таким образом, я могу подключиться через SSH извне также, когда соединение NordVPN активно, но когда я запускаю частный VPN-клиент, он не может выполнить рукопожатие с этими ошибками:
XXX.XXX.XXX.XXX:53347 TLS: Initial packet from [AF_INET]XXX.XXX.XXX.XXX:53347, sid=5138c564 319ce197
Dec 08 23:02:55 rpi ovpn-server[19950]: XXX.XXX.XXX.XXX:53347 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
Dec 08 23:02:55 rpi ovpn-server[19950]: XXX.XXX.XXX.XXX:53347 TLS Error: TLS handshake failed
Я занимаюсь этой проблемой уже 2 недели, и у меня определенно нет другой идеи. Может кто мне поможет?
Заранее спасибо.
PS: Я не пишу свои правила iptables, потому что их много.
ОБНОВЛЕНИЕ: это мой server.conf
dev tun
proto udp
port PORT
ca /etc/openvpn/easy-rsa/pki/ca.crt
cert /etc/openvpn/easy-rsa/pki/issued/XXX.crt
key /etc/openvpn/easy-rsa/pki/private/XXX.key
dh none
topology subnet
server 10.35.0.0 255.255.255.0
# Set your primary domain name server address for clients
push "dhcp-option DNS 1.1.1.1"
push "dhcp-option DNS 1.0.0.1"
# Prevent DNS leaks on Windows
push "block-outside-dns"
# Override the Client default gateway by using 0.0.0.0/1 and
# 128.0.0.0/1 rather than 0.0.0.0/0. This has the benefit of
# overriding but not wiping out the original default gateway.
push "redirect-gateway def1"
client-to-client
keepalive 1800 3600
remote-cert-tls client
tls-version-min 1.2
tls-crypt /etc/openvpn/easy-rsa/pki/ta.key
cipher AES-256-CBC
auth SHA256
user nobody
group nogroup
persist-key
persist-tun
crl-verify /etc/openvpn/crl.pem
status /var/log/openvpn-status.log 20
status-version 3
syslog
verb 3
#DuplicateCNs allow access control on a less-granular, per user basis.
#Remove # if you will manage access by user instead of device.
#duplicate-cn
# Generated for use by PiVPN.io
и это конфиденциальный клиент conf
client
dev tun
proto udp
remote ISP_IP PORT
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
tls-version-min 1.2
verify-x509-name XXX name
cipher AES-256-CBC
auth SHA256
auth-nocache
verb 3
Это мои маршруты:
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.8.0.1 128.0.0.0 UG 0 0 0 tun0
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
10.8.0.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0
10.35.0.0 0.0.0.0 255.255.255.0 U 0 0 0 tun1
128.0.0.0 10.8.0.1 128.0.0.0 UG 0 0 0 tun0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
192.168.4.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan0
NORDVPN_GW 192.168.1.1 255.255.255.255 UGH 0 0 0 eth0
ОБНОВЛЕНИЕ 2:
Топология сети:
КЛИЕНТЫ WIFI LAN (192.168.4.X) -> RPI (eth0 192.168.1.117, wlan0 192.168.4.1, tun0 NordVpn client 10.8.0.0/16, tun1 10.35.0.1 сервер OpenVpn) -> ROUTER (192.168.1.1) -> ИНТЕРНЕТ
Что бы я хотел сделать:
OPENVPN КЛИЕНТ (10.35.0.2) -> ИНТЕРНЕТ -> МАРШРУТИЗАТОР -> RPI
Я решил.
Проблема в данном случае в том, что эта строка отсутствует в конфигурации сервера OpenVPN.
local 192.168.1.117
Итак, правильная маршрутизация для меня:
ip rule add from 192.168.1.117 table novpn
ip route add default via 192.168.1.1 dev eth0 table novpn