我需要一个 iptables 规则,将出站流量作为 192.168.1.3 进行 nat 到 192.168.0.1。该怎么做?
192.168.0.1 是我的目标目的地,是另一个网络的一部分。192.168.1.3 是我的数据包应该从哪个 IP 地址到达网关以达到目标 192.168.0.1。
有人能给我一个实际的例子吗?
答案1
假设你有一个接口 eth0,其网络为 10.0.0.0/24,你的客户端就驻留在该接口上,还有另一个接口 eth1,其 IP 为 192.168.1.3,你可以使用此接口到达目的地 (192.168.0.1)
iptables -t nat -A POSTROUTING -i eth0 -d 192.168.0.1 -j SNAT --to-source 192.168.1.3
或者
iptables -t nat -A POSTROUTING -i eth0 -d 192.168.0.1 -j MASQUERADE
两者都可以工作。但是,如果您没有 IP 为 192.168.1.3 的接口(eth1 有其他 IP),那么只有第一个可以工作,而且只有当您在 eth1 上拥有的 IP 作为到 192.168.1.0/24 的路由出现在您的下一跳路由表中时才可以。正如您的问题评论中提到的,您必须将 192.168.1.3 作为您的接口 IP,否则连接到您的路由器必须知道,如果它需要将内容发送到 192.168.1.3,它应该将其发送到您的接口。希望这能解释清楚。
答案2
如果您只是在紧邻的路由器上设置 NAT,并确保 192.168.1.0/24 子网不存在于您这边,它会自动将该地址视为 Internet 地址并为您执行 NAT。它是 RFC1918 地址并不重要。
数据包似乎来自 NAT 主机。如果该主机不是 192.168.1.3,则无法执行此操作(数据包的返回路径将无效)。
但是,根据您的网络架构,您可能不需要在这些子网之间使用 NAT。使用路由协议(如 RIP)并允许路由器在这两个子网之间路由是完全合法的。在这种情况下使用 RFC1918 地址的唯一含义是您无法使用它们遍历公共互联网;在您的内部网上,它们可以像任何其他地址一样使用,包括用于子网划分和路由。