OpenVPN 连接仅适用于指定的 IP 地址

OpenVPN 连接仅适用于指定的 IP 地址

我在 ubuntu 服务器上有一个带有 OpenVpn 的 vpn,它适用于每个连接。

服务器配置是:

port 1194
proto udp
dev tun
ca easy-rsa/keys/ca.crt
cert easy-rsa/keys/CommonName.crt
key easy-rsa/keys/CommonName.key
dh easy-rsa/keys/dh2048.pem
server 10.8.0.0 255.255.255.0
#push "redirect-gateway def1 bypass-dhcp"
push "redirect-gateway def1"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 8.8.4.4"
push "topology subnet"
topology subnet
route 10.8.0.0 255.255.255.0
keepalive 10 120
comp-lzo
user openvpn
group openvpn
persist-key
persist-tun
status openvpn-status.log
verb 3

我的 client.conf 包含:

client
dev tun
proto udp
remote IP_ADDRESS 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert user.crt
key user.key
ns-cert-type server
comp-lzo
verb 3

当前服务器正在通过 vpn 连接路由每个连接。

这是通过 iptables 完成的:

iptables -A FORWARD -o ens3 -i tun0 -s 10.8.0.0/24 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING  -o ens3 -j MASQUERADE

所以,这样就很好了。

现在,如果源目的地是 example.com,我只想使用 vpn 连接。否则就不行。

所以我尝试了这个:

iptables -A FORWARD -o ens3 -i tun0 -s 10.8.0.0/24 -d example.com -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -m conntrack -s example.com --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING  -o ens3 -j MASQUERADE

但这不起作用。我也使用了来自的 IP 地址example.com

但如果我浏览其他网站,它将使用 vpn 连接。我通过以下测试验证了这一点:show my current ip adress services

我做错了什么?

iptables --help向我展示

[!] --目标 -d 地址[/掩码][...]

或者它对此不起作用?我该如何修复它?

答案1

您需要向路由表添加规则。

ip route add $example.com.ip via $vpn.gateway

对于更复杂的路由,您可以使用 iptables 在数据包上设置标记,然后ip rule根据标记进行路由。

此外,您的配置会将 VPN 添加为所有内容的“默认”路由。您需要删除该redirect-gateway选项。

另一个想法是,如果您从建立 VPN 隧道的同一台机器(客户端)进行测试,那么根本就不会使用 FORWARD 链。FORWARD 不适用于本地生成的数据包。

相关内容