我正在尝试使用 iptables 将出站流量重定向到外部 IP 地址,就像它是入站流量一样。我的设置如下;
NET A NET B
|------| |------| |--|
|SERVER|<----->|DD-WRT|<----->|FW|<--> WAN
|------| | |------| |--|
|
|------| |
| COMP |<--|
|------|
其中SERVER和COMP都是网络A上的计算机,DD-WRT是连接网络A和B的路由器,FW是连接网络B和WAN的大型防火墙。
我在 DD-WRT 路由器和大型防火墙上正确设置了端口转发,以便在外部计算机尝试连接到 FW 时将数据包转发到服务器。但是,当 COMP 尝试连接到 FW 时,数据包会被丢弃,因为 FW 无法识别内部发往 WAN 地址的数据包需要根据外部规则进行路由。
因此,我想以某种方式路由从 COMP 发出并发往 FW 的 WAN 地址的数据包,使其在 DD-WRT 中显示为好像它们的目的地是它的网络 B 地址,因为我知道它能够正确路由这些类型的数据包。
如果其他人有更好的建议,我当然很高兴听到!
答案1
我猜您正在对从 NET A 到 NET B 的流量进行 NAT,在这种情况下,您需要添加一条规则来排除从 NET A 发往 DD-WRT 的 NET B 地址的流量 - 类似于:
iptables -t nat -I POSTROUTING -s <net.a.ip.block/mask> -d <dd-wrt.net.b.address> -j ACCEPT
或者你可以像这样重写地址:
iptables -t nat -I PREROUTING -s <net.a.ip.block/mask> -d <dd-wrt.net.b.address> -j DNAT --to <SERVER.net.a.address>
编辑:正确地重读这个问题,你将需要第二种方法的变体:
iptables -t nat -I PREROUTING -s <net.a.ip.block/mask> -d <fw.wan.add.ress> -j DNAT --to <server.net.a.address>