我使用 Raspberry pi 作为路由器来为我的电脑和 ioT 设备提供服务。连接图如下: 网络设置 RPi 有两个以太网端口,eth1 连接到我的家庭网络 192.168.1.0/24,eth2 连接到交换机,我的电脑和物联网设备连接到该交换机。在 RPi 上,dnsmasq 用作 DHCP 和 DNS 服务器,为我的电脑和物联网设备分配 IP 地址。Openvpn 客户端设置为连接到远程 VPN 服务器(公司网络)。我想要实现的是仅通过我的 VPN(tun0)引导部分流量,而大多数其他流量则通过我的家庭网络。
我的 iptables 设置如下:
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A FORWARD -i eth0 -o tun0 -d 10.1.0.0/16 -j ACCEPT
-A FORWARD -i eth0 -o tun0 -d 10.2.0.0/16 -j ACCEPT
-A FORWARD -i tun0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -o eth1 -j ACCEPT
-A FORWARD -i eth1 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
COMMIT
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -o tun0 -j MASQUERADE
-A POSTROUTING -o eth1 -j MASQUERADE
COMMIT
当 openvpn 连接建立后,我可以毫无问题地与公司通话(从我的电脑)。但是,所有流量都通过 VPN tun0 路由,我无法访问家庭网络(从我的电脑)。我猜这与我的 iptables 设置有关,有什么建议吗?
编辑:添加下面的 OpenVPN 配置
dev tun
client
proto tcp
<ca>
-----BEGIN CERTIFICATE-----
==
-----END CERTIFICATE-----
</ca>
<cert>
-----BEGIN CERTIFICATE-----
==
-----END CERTIFICATE-----
</cert>
<key>
-----BEGIN PRIVATE KEY-----
==
-----END PRIVATE KEY-----
</key>
remote-cert-eku "TLS Web Server Authentication"
remote example-domain.com 443
route-nopull
route 10.1.0.0 255.255.0.0 10.0.0.1
route 10.2.0.0 255.255.0.0 10.0.0.1
dhcp-option DNS 10.1.0.253
dhcp-option DNS 10.1.0.254
dhcp-option WINS 10.1.0.253
dhcp-option WINS 10.1.0.254
dhcp-option DOMAIN internal.example-domain.com
block-outside-dns
redirect-gateway def1
persist-key
persist-tun
verb 3
mute 20
keepalive 10 60
cipher AES-256-CBC
auth SHA256
float
reneg-sec 3660
nobind
mute-replay-warnings
auth-user-pass
答案1
OpenVPN 配置文件中负责处理默认路由的条目是这个
redirect-gateway def1
它告诉 OpenVPN 客户端通过 OpenVPN 网关重定向所有流量。
如果您想控制通过 OpenVPN 隧道发送哪些路由,关键字是route
。它可以重复多次,每个子网一次。例如,要通过隧道发送10.0.0.0/8
和192.168.77.0/24
子网中的所有内容,同时让其他所有内容通过 LAN 和 LAN 网关路由,您可以使用此配置设置,而不是redirect-gateway
一个
# route network/IP [netmask] [gateway] [metric]
route 10.0.0.0 255.0.0.0
route 192.168.77.0 255.255.255.0
在您的情况下,路由已经指定,因此您只需注释掉该redirect-gateway
行并重新启动 VPN 连接。