如果打开,iptables 会将流量转发到 vpn 隧道

Shr*_*ut1 11 iptables openvpn forwarding tunneling

我使用以下指南将我的树莓派设置为接入点:

Raspberry Pi 3 作为 wifi 接入点

我转发wlan0eth0和内廷我所有的流量。效果很好!

sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE  
sudo iptables -A FORWARD -i eth0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT  
sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT 
Run Code Online (Sandbox Code Playgroud)

现在我想设置相同的规则,除了使用接口tun0-00并通过我的 vpn 隧道转发我的所有流量。我确实想发送所有内容,不希望任何内容泄漏到主机网络中。想想它是这样的:

sudo iptables -t nat -A POSTROUTING -o tun0-00 -j MASQUERADE
sudo iptables -A FORWARD -i tun0-00 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o tun0-00 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

不幸的是,我知道这些 iptables 规则并不完整......问题在于eth0熬夜;将流量转发到的原始规则eth0仍然存在。

如果隧道是开放的,我想通过隧道发送我的所有流量;如果没有,我很擅长使用eth0.

更新:

使用 -I 标志插入我的规则:

sudo iptables -t nat -I POSTROUTING 1 -o tun0-00 -j MASQUERADE
sudo iptables -I FORWARD 1 -i tun0-00 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -I FORWARD 1 -i wlan0 -o tun0-00 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

FORWARD链:

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1        0     0 ACCEPT     all  --  wlan0  tun0-00  0.0.0.0/0            0.0.0.0/0           
2        0     0 ACCEPT     all  --  tun0-00 wlan0   0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
3        0     0 ACCEPT     all  --  eth0   wlan0   0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
4        0     0 ACCEPT     all  --  wlan0  eth0    0.0.0.0/0            0.0.0.0/0           
5        0     0 ACCEPT     all  --  wlan1  wlan0   0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
6        0     0 ACCEPT     all  --  wlan0  wlan1   0.0.0.0/0            0.0.0.0/0           
Run Code Online (Sandbox Code Playgroud)

仍然没有喜悦,转发似乎不起作用。

客户端 VPN 配置

我已经擦掉了看起来很敏感的东西:

dev tun
persist-tun
persist-key
cipher AES-256-CBC
auth SHA1
tls-client
client
resolv-retry infinite
remote XXX.XXX.XXX.XXX PORT_NUM udp
lport XXX
verify-x509-name "VPN_Certificate" name
pkcs12 CERT_NAME.p12
tls-auth CERTIFICATE-tls.key 1
ns-cert-type server
redirect-gateway local def1
Run Code Online (Sandbox Code Playgroud)

pi 连接得很好并反映了不同的公共 IP。客户端仍然将 pi 显示为他们的网关,但他们无法再连接。

解决方案

首先,我需要添加redirect-gateway def1到 pi 上的 .ovpn 文件中。

然后我需要正确输入我的接口名称......呃。我觉得自己像个疯子,但显然我tun0-00一开始就看到了,那是它唯一存在的时候。界面实际上只是tun0.

所以适当的 iptables 命令是:

sudo iptables -t nat -I POSTROUTING 1 -o tun0 -j MASQUERADE
sudo iptables -I FORWARD 1 -i tun0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -I FORWARD 1 -i wlan0 -o tun0 -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

现在效果很好!

roa*_*ima 18

您将需要在iptables. 这两个规则集确保从指定接口离开的流量被适当伪装。这是我的建议,它比你的简单一点:

# Masquerade outgoing traffic
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

# Allow return traffic
iptables -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT

# Forward everything
iptables -A FORWARD -j ACCEPT
Run Code Online (Sandbox Code Playgroud)

缺少的拼图部分是路由。如果隧道已启动,您希望“所有”传出流量都使用它。否则使用正常路线。

这是在 OpenVPN 中使用redirect-gateway def1客户端配置中的参数处理的。