我有一个配置如下的网络:一个路由器和一个充当 WiFi 接入点的 RPI、dhcp 和 dns 服务器、防火墙和网关。RPI 还通过 OpenVpn 客户端连接到付费 VPN 服务 (NordVPN),因此所有 WiFi 客户端都使用 VPN 连接。
我正在尝试创建一个私有 VPN,以便我也可以从外部连接到 RPI。为此,我在 RPI 上运行了一个 VPN 服务器。NordVPN 不提供端口转发,因此我无法通过 NordVPN IP 地址连接到 RPI,我正尝试从 ISP 公共 IP 访问 RPI。我配置了从路由器到 RPI 本地 IP 地址的端口转发。
当 NordVPN 连接关闭时,我可以通过私有 VPN 连接到 RPI,但当 NordVPN 连接运行时,我无法连接。
我读到问题出在路由上,所以我对其进行了配置,结果达到的最大结果是,当 NordVPN 连接正在运行时,我可以从外部通过 SSH 连接到 RPI,但我无法连接到我的 OpenVPN 客户端(正在运行 NordVPN)。问题是客户端和服务器没有完成握手。服务器收到第一个数据包(我认为防火墙可能没问题),但它无法发送回复(或者它通过错误的路由发送)。但似乎这个问题与 SSH 连接无关,因为它从外部工作(我猜服务器回复了客户端握手)。
其他信息:
- 192.168.4.0/24 是本地客户端的网络(rpi 的 wifi)
- 192.168.1.0/24 是本地路由器的网络
- 192.168.1.1 是路由器
- 192.168.1.117 是 RPI eht0
- 10.8.0.0/16 是 NordVPN tun0 网络
- 付费 VPN 在标准 OpenVPN 端口上运行,但私人 VPN 在不同的端口上运行
首先,这里,我尝试使用 RPI 上的这些路由从路由器转发到 192.168.1.117。
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
因此,当 NordVPN 连接处于活动状态时,我也可以通过 SSH 从外部进行连接,但当我启动私人 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
我已经遇到这个问题两周了,而且我肯定没有其他想法。也许有人可以帮助我?
提前致谢。
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
这是私人客户会议
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 客户端 10.8.0.0/16, tun1 10.35.0.1 OpenVpn 服务器) -> 路由器 (192.168.1.1) -> 互联网
我想要做的事情:
OPENVPN 客户端(10.35.0.2)->互联网->路由器->RPI
答案1
我解决了。
在这种情况下,问题是 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