我想使用 OpenVPN 连接访问我的本地资源。我已iptables
设置为允许从192.168.1.0/24
子网连接。当我从手机或 Windows 机器连接时,一切都运行正常。但当我尝试从 Ubuntu 连接时,却不行。
检查tcpdump
并阅读大量日志后,我发现来自 Ubuntu 的数据包SRC=real white ip
适用于手机或 Windows SRC=local tunnel ip
,并且它可以按预期工作。
然后,我在连接到 VPN 时检查了我的路由,发现以下内容(假设77.77.77.77
- OpenVPN 服务器,192.168.8.1
- 我的路由器):
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.255.5 0.0.0.0 UG 50 0 0 tun0
0.0.0.0 192.168.8.1 0.0.0.0 UG 600 0 0 wlp2s0
77.77.77.77 192.168.8.1 255.255.255.255 UGH 600 0 0 wlp2s0
192.168.8.0 0.0.0.0 255.255.255.0 U 600 0 0 wlp2s0
192.168.8.1 0.0.0.0 255.255.255.255 UH 600 0 0 wlp2s0
192.168.255.1 192.168.255.5 255.255.255.255 UGH 50 0 0 tun0
192.168.255.5 0.0.0.0 255.255.255.255 UH 50 0 0 tun0
我认为我的问题的根源是:
77.77.77.77 192.168.8.1 255.255.255.255 UGH 600 0 0 wlp2s0
因为它说要使用我的路由器作为网关来访问 VPN 服务器本身。结果,我看到的是我的真实 IP 地址,而不是隧道 IP 地址。
但我不知道如何解决这个问题。我已经尝试手动修改路由以通过隧道将流量路由到服务器,但这没有帮助:
77.77.77.77 192.168.255.5 255.255.255.255 UGH 600 0 0 tun0
因此,如果我的所有调查都正确理解了,那么为了解决问题,我需要通过隧道而不是默认网关将流量路由到 vpn 服务器本身。我认为redirect-gateway def1
指令应该重定向全部VPN 上的流量,包括它本身。但看起来并非如此。
我的服务器配置文件:
server 192.168.255.0 255.255.255.0
verb 3
key /etc/openvpn/pki/private/vpn.example.com.key
ca /etc/openvpn/pki/ca.crt
cert /etc/openvpn/pki/issued/vpn.example.com.crt
dh /etc/openvpn/pki/dh.pem
tls-auth /etc/openvpn/pki/ta.key
key-direction 0
keepalive 10 60
persist-key
persist-tun
proto udp
port 1194
dev tun0
status /tmp/openvpn-status.log
user nobody
group nogroup
route 192.168.254.0 255.255.255.0
push "block-outside-dns"
push "dhcp-option DNS 192.168.1.1"
push "dhcp-option DOMAIN lan"
我的客户端.ovpn:
client
nobind
dev tun
remote-cert-tls server
remote vpn.example.com 1194 udp
...certificates...
key-direction 1
redirect-gateway def1