我有以下拓扑:
- 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,但这通常是您想要的。