我有一个IP为10.0.0.1/24的桥接网络br0,我有一个与IP 10.0.0.2相连的客户端。我也有一个VPN连接(tun0),该连接具有由DHCP分配的IP,因此它的IP可能会有所不同。VPN连接不是系统的默认路由,因此设备上的所有流量都通过常规eth0路由(不是VPN路由)。(在主机上启用了IPv4转发)
我要实现的目标是,将网关设置为10.0.0.1的所有连接到br0(在我的情况下为LXC容器)的客户端,都应通过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的建议,我终于找到了缺少的设置。
这是使其工作的最终命令:
iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
iptables -A FORWARD -i br0 -o tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -o br0 -j ACCEPT
iptables -A INPUT -i tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT
ip route add default dev tun0 table vpnout
ip route add 10.0.0.0/24 dev br0 table vpnout
ip rule add from 10.0.0.0/24 table vpnout
ip rule add to 10.0.0.0/24 table vpnout
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句