Shr*_*ut1 11 iptables openvpn forwarding tunneling
我使用以下指南将我的树莓派设置为接入点:
我转发wlan0
到eth0
和内廷我所有的流量。效果很好!
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
客户端配置中的参数处理的。