Linux 路由器具有不同的网关用于传入和传出连接

Linux 路由器具有不同的网关用于传入和传出连接

我有以下拓扑:

  • LAN 用户:192.168.1.2 - 254(192.168.1.0/24)
  • gateway1:192.168.2.2/24,用于 LAN 用户的所有传出连接(默认网关)
  • 网关2:192.168.3.2/24 用于入站服务(目标 NAT,端口 80,443 转发至 192.168.2.1)
  • Linux 路由器服务器 R
    • eth0 192.168.1.1/24:局域网
    • eth1 192.168.2.1/24: WWAN1
    • eth2 192.168.3.1/24:WWAN2

我想要:

  • 通过 192.168.2.2 路由来自 LAN 和 R 的所有传出流量
  • 通过 192.168.3.2 将响应路由到传入连接

我的配置:

ifconfig eth0 up 192.168.1.1 netmask 255.255.255.0
ifconfig eth1 up 192.168.2.1 netmask 255.255.255.0
ifconfig eth2 up 192.168.3.1 netmask 255.255.255.0
echo 0 >/proc/sys/net/ipv4/ip_forward
route add default gw 192.168.2.2
iptables -t nat -A POSTROUTING -d !192.168.0.0/16 -j MASQUERADE

我想添加 iptables 规则来标记来自 WWAN2 的传入流量并将响应发送回 WWAN2,同时保持 WWAN1 上的默认网关

答案1

这是一个解决方案吗?

ifconfig eth0 up 192.168.1.1 netmask 255.255.255.0
ifconfig eth1 up 192.168.2.1 netmask 255.255.255.0
ifconfig eth2 up 192.168.3.1 netmask 255.255.255.0
echo 0 >/proc/sys/net/ipv4/ip_forward
route add default gw 192.168.2.2

iptables -t nat -A POSTROUTING -d !192.168.0.0/16 -j MASQUERADE

iptables -A PREROUTING -t mangle -j CONNMARK --restore-mark
iptables -A PREROUTING -t mangle --match mark --mark 2 -j ACCEPT
iptables -A PREROUTING -t mangle -i eth2 -j MARK --set-mark 2
iptables -A PREROUTING -t mangle -j CONNMARK --save-mark

ip route add 192.168.3.0/24 dev eth2 table 100
ip route add default via 192.168.3.2 dev eth2 table 100

ip rule add fwmark 2 table 100 prio 1024 # before main table

答案2

无需 iptables 即可完成此操作:

echo "12 wwan2" >> /etc/iproute2/rt_tables
ip route add default via 192.168.3.2 table wwan2
ip rule add from 192.168.3.0/24 table wwan2

正常的默认网关应指向 192.168.2.2。这将明确路由来自 192.168.3.1 的传出连接(即您已配置为使用此源 IP 的应用程序)通过 WWAN2,但这通常是您想要的。

相关内容