抱歉,问了一个非常常见的问题,但其他人的解决方案并没有奏效。
我想使用 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:公平地说,我想要的只是让流量从一边流向另一边,我使用的命令如下
############################3iptables -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