![具有两个上游接口的 NAT?](https://linux22.com/image/706506/%E5%85%B7%E6%9C%89%E4%B8%A4%E4%B8%AA%E4%B8%8A%E6%B8%B8%E6%8E%A5%E5%8F%A3%E7%9A%84%20NAT%EF%BC%9F.png)
几天后,我将处理一些现场硬件,这些硬件由六个 Centos 盒子组成,它们联网但不连接到互联网。为了完成我的工作(特别是应用更新),我需要暂时将这些小网络连接到互联网。
最有可能的是,我的上行连接将通过 Fedora 笔记本电脑的 wifi 接口(然后通过 4G 调制解调器继续)。一般的想法是在我的笔记本电脑上进行 NAT,将其以太网接口插入具有合适本地 IP 的现场网络,并暂时将其设置为现场机器上的默认路由。
到目前为止一切顺利,但有些更新需要来自我们公司的网络(通过我笔记本电脑上的专有 VPN 客户端),有些更新需要来自公共互联网,因此出现了一个问题。VPN 服务器不会将非办公室流量转发到互联网,客户端只能通过 VPN 路由“办公室”数据包并直接发送互联网流量。
我并不是特别精通路由、iptables 等。我挑选了这些配置片段,它们几乎可以完成我所需的 NAT:
iptables -A FORWARD -i $NAT_IF -j ACCEPT
iptables -A FORWARD -o $NAT_IF -j ACCEPT
iptables -t nat -A POSTROUTING -o $WAN_IF -j MASQUERADE
...$NAT_IF
我的笔记本电脑的以太网端口(本地端)在哪里,$WAN_IF
是 wifi 接口还是VPN 客户端创建的接口。因此,我可以让客户端计算机连接到互联网或公司办公室,但不能同时连接到两者。当一个命令可能需要同时提取一些公共 RPM 和一些专有公司 RPMppp
时,这不是很方便。dnf update
不幸的是,我现在无法尝试,但也许这就像复制上面的最后一行一样简单,其中一行使用 VPN 作为 $WAN_IF,另一行使用 wifi 接口。但是,我怀疑不是,因为它似乎没有做任何事情来指定哪些数据包需要通过 ppp 接口(10.0.0.0/8 的任何内容)以及哪些数据包直接发送到 wifi(其他所有内容)。
我需要在我的笔记本电脑(充当路由器)上做什么才能让本地网络上的机器与办公室和互联网通信,最好在笔记本电脑上区分两者,而不是必须在每个客户端上进行配置?
感谢您的帮助。
答案1
为了区分交通路线,您需要添加路线
ip route add 10.0.0.0/8 dev $VPN_IF
或者
ip route add 10.0.0.0/8 via $TUNNEL_REMOTE_IP
如何添加它取决于您的 vpn 配置。
例如:您可以在 NetworkManager GUI 中配置其他路由
您可能需要对 VPN 进行伪装,就像对 WAN 进行伪装一样
iptables -t nat -A POSTROUTING -o $VPN_IF -j MASQUERADE
如果您公司的 VPN 服务器对您的 LAN 子网一无所知。