我的家庭网络上有两台 Linux 主机,host1 和 host2。我尝试配置它,以便 host1 连接到 vpn,而 host2 可以通过 host1 路由通过 vpn 发送数据包。我天真的尝试是运行
root@host1 # iptables -A FORWARD -i wlp2s0 -o tun0 -j ACCEPT
root@host1 # iptables -A FORWARD -i tun0 -o wlp2s0 -j ACCEPT
root@host1 # iptables -A INPUT -i wlp2s0 -j ACCEPT
root@host1 # iptables -A INPUT -i tun0 -j ACCEPT
root@host1 # iptables -A OUTPUT -o tun0 -j ACCEPT
root@host1 # iptables -A OUTPUT -o wlp2s0 -j ACCEPT
在路由主机上,
user@host2 $ sudo ip route add 104.24.122.145/32 via 10.0.0.76 dev wlp58s0
user@host2 $ curl 104.24.122.145 -H 'Host: ifconfig.io'
在另一台主机上。我的想法是,如果一切按预期运行,我可以通过点击 ifconfig.io 的一个 ip 来获取我的家庭 ip 地址,并通过点击另一个 ip 来获取 vpn ip 地址。
但是,当我运行该curl
命令时,它会超时,并且 iptable 日志似乎没有表明有任何流量正在跳转。(大概INPUT
和OUTPUT
数据包都来自背景流量)。
root@host1 # sudo iptables -L -vn
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
5 383 ACCEPT all -- tun0 * 0.0.0.0/0 0.0.0.0/0
8 847 ACCEPT all -- wlp2s0 * 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- tun0 wlp2s0 0.0.0.0/0 0.0.0.0/0
0 0 ACCEPT all -- wlp2s0 tun0 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
5 459 ACCEPT all -- * wlp2s0 0.0.0.0/0 0.0.0.0/0
2 151 ACCEPT all -- * tun0 0.0.0.0/0 0.0.0.0/0
我错过了什么?我正在使用这作为理解的基线。我没有完全遵循它,但我看不出我做错了什么。
答案1
您需要启用 ip 转发:
编辑 /etc/sysctl.conf。取消注释该行
net.ipv4.ip_forward=1
重新加载新设置:
sudo sysctl -p /etc/sysctl.conf