使用 iptables 将流量从一个接口路由到另一个接口

使用 iptables 将流量从一个接口路由到另一个接口

抱歉,问了一个非常常见的问题,但其他人的解决方案并没有奏效。

我想使用 eth0(内部网络接口)路由到 eth1(外部网络接口)iptables。eth1 通过对上行流量进行 NAT 的路由器连接到互联网。

  • 路由器内部IP = 192.168.0.1
  • PC外网IP = 192.168.0.2
  • PC 内部 IP = 10.0.0.1

客户端我想通过 PC = 10.0.0.2 从路由器访问互联网

编辑:我刚刚注意到运行“iptables -t nat -L -v”后我得到:

[root@localhost 防火墙]# iptables -t nat -L -v Chain PREROUTING (policy ACCEPT 103 packets, 13461 bytes) pkts bytes target prot opt in out source destination

链输入(策略接受 40 个数据包,5406 字节)数据包字节目标协议选择加入退出源目标

链输出(策略接受 795 个数据包,54448 字节)数据包字节目标协议选择加入退出源目标

链 POSTROUTING (策略接受 202 个数据包,14292 字节) pkts 字节目标 prot 选择加入退出源目标
594 40264 MASQUERADE 全部 -- 任何 enp2s0 任何位置任何位置

这表明,包裹虽然违反了规则,但并未到达路由器,或者可能无法从那里返回,不确定。

edit2:公平地说,我想要的只是让流量从一边流向另一边,我使用的命令如下

############################3

iptables -F iptables -t nat -F

echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -t nat -A POSTROUTING -o enp2s0 -j MASQUERADE

#

并且我的表格在运行之后:

#

[root@localhost 防火墙]# iptables -L -v Chain INPUT (策略接受 5077 个数据包, 1875K 字节) pkts 字节目标 prot opt in out 源目标

链转发(策略接受 446 个数据包,47160 字节)数据包字节目标协议选择加入退出源目标

链输出(策略接受 6292 个数据包,649K 字节)数据包字节目标协议选择加入退出源目标

#

[root@localhost 防火墙]# iptables -L -v Chain INPUT (策略接受 5077 个数据包, 1875K 字节) pkts 字节目标 prot opt in out 源目标

链转发(策略接受 446 个数据包,47160 字节)数据包字节目标协议选择加入退出源目标

链输出(策略接受 6292 个数据包,649K 字节)数据包字节目标协议选择加入退出源目标

#

答案1

您无法这样做。IPTABLES 不会路由流量。它可以过滤和 NAT 流量,但路由需要使用不同的命令(如“ip”或“route”(较旧的方法))来完成

也就是说,你的命令“iptables -t nat -A POSTROUTING -o enp2s0 -j MASQUERADE”是错误的。如果你将 enp2s0 更改为 eth1,一切很可能就会正常

然而,更好的方法是放弃 MASQUERADE,并在路由器上添加一条到 10.0.0.0 网络掩码 255.0.0.0 的路由,网关为 192.168.0.2

相关内容