You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Linux环境下通过VPN实现两个局域网互通的iptables规则配置咨询

Linux环境下通过VPN实现两个局域网互通的iptables规则配置咨询

老兄,你这个场景我之前折腾过好几次,核心就是要配置**源地址转换(SNAT)**和放行必要的转发规则——毕竟你已经把IP转发和路由都搞定了,差的就是iptables这临门一脚。我给你分节点一步步说清楚:

客户端A(192.168.5.5 / 10.0.0.5)的规则

假设你的本地局域网接口是eth0,VPN隧道接口是tun0(如果是PPTP这类可能是ppp0,自己用ip addr确认下),执行以下命令:

  1. 放行VPN到本地局域网、本地局域网到VPN的转发流量:
iptables -A FORWARD -i tun0 -o eth0 -s 10.0.0.0/24 -d 192.168.5.0/24 -j ACCEPT
iptables -A FORWARD -i eth0 -o tun0 -s 192.168.5.0/24 -d 192.168.10.0/24 -j ACCEPT
  1. 配置SNAT,让本地局域网机器访问B的局域网时,源地址替换成A的VPN地址(不然B那边的回包找不到路):
iptables -t nat -A POSTROUTING -o tun0 -s 192.168.5.0/24 -d 192.168.10.0/24 -j SNAT --to-source 10.0.0.5

客户端B(192.168.10.10 / 10.0.0.10)的规则

和A的逻辑完全对称,只是把网段反过来:

  1. 放行转发流量:
iptables -A FORWARD -i tun0 -o eth0 -s 10.0.0.0/24 -d 192.168.10.0/24 -j ACCEPT
iptables -A FORWARD -i eth0 -o tun0 -s 192.168.10.0/24 -d 192.168.5.0/24 -j ACCEPT
  1. 配置SNAT:
iptables -t nat -A POSTROUTING -o tun0 -s 192.168.10.0/24 -d 192.168.5.0/24 -j SNAT --to-source 10.0.0.10

VPN服务器(10.0.0.1)的规则

需要允许两个客户端的VPN流量互相转发,毕竟所有VPN流量都要经过服务器中转:

iptables -A FORWARD -i tun0 -o tun0 -s 10.0.0.5/32 -d 10.0.0.10/32 -j ACCEPT
iptables -A FORWARD -i tun0 -o tun0 -s 10.0.0.10/32 -d 10.0.0.5/32 -j ACCEPT

如果服务器的iptables默认转发策略是拒绝,你可能还要加一条更宽泛的规则放行整个VPN段的转发:

iptables -A FORWARD -i tun0 -o tun0 -s 10.0.0.0/24 -d 10.0.0.0/24 -j ACCEPT

额外注意事项

  • 确认每个节点的IP转发已经永久生效:编辑/etc/sysctl.conf,把net.ipv4.ip_forward改成1,然后执行sysctl -p生效。
  • 如果用了firewalld或者ufw这类防火墙管理工具,要么把上述规则导入到对应工具里,要么临时关闭工具测试(避免规则冲突)。
  • 测试时可以在A的局域网机器ping B的局域网机器,用iptables -L -viptables -t nat -L -v查看规则是否有匹配的流量,方便排查问题。

备注:内容来源于stack exchange,提问作者is_this_taken

火山引擎 最新活动