我有一个具有 IP 10.0.0.1/24的网桥网络br0,我有一个与 IP 10.0.0.2连接的客户端。我还有一个 VPN 连接(tun0),它的 IP 由 DHCP 分配,所以它的 IP 可能会有所不同。VPN 连接不是系统的默认路由,因此设备上的所有流量都通过常规eth0路由(不是 VPN 路由)。(主机上启用了 IPv4 转发)
我想要实现的是,任何连接到br0(在我的情况下是 LXC 容器)且网关设置为10.0.0.1的客户端都应该通过 VPN 连接对其流量进行 NAT 和路由。
由于无法直接将tun0设备连接到br0,我尝试使用iptables获取转发的流量。
因此,我认为我必须采取的步骤是强制来自br0的流量被伪装,然后通过使用以下命令转发到tun0 :
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
iptables -A FORWARD -i br0 -o tun0 -j ACCEPT
我还添加了状态跟踪,但它不起作用:
iptables -A INPUT -i br0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A INPUT -i tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
要添加辅助默认路由,我在文件“/etc/iproute2/rt_tables”中添加了“1 vpnout”条目,并添加了默认路由:
ip route add default dev vpn-out table vpnout
哪个不起作用,并且下一个命令的结果相同
ip route add default via dev vpn-out table vpnout
ip rule add from 10.0.0.0/24 table vpnout
ip rule add to 10.0.0.0/24 table vpnout
但在那之后,我仍然无法从连接到br0的客户端 ping 8.8.8.8。有什么我错过的吗?
因此,由于@Fiisch 的建议,最后我终于找到了缺失的设置。
这是使其工作的最终命令: