![CentOS 6 iptables nat 路由器](https://linux22.com/image/96080/CentOS%206%20iptables%20nat%20%E8%B7%AF%E7%94%B1%E5%99%A8.png)
我正在尝试为实验室设置 nat 路由器来模拟连接到 WAN 的专用网络。我有三个虚拟机:
- 公网IP 192.168.0.5/24
- 私有IP 172.16.0.5/24
- 路由器 192.168.0.1/24 (eth0)、172.16.0.1/24 (eth1)
我首先配置每个系统的网络,并确认我可以从专用 -> 路由器和公共 -> 路由器之间执行 ping 操作。
然后我net.ipv4.ip_forward
使用 设置为 1 sysctl.conf
,并应用更改。
此时我无法 ping 私人到公共以及公共到私人。刷新路由器的 iptables 规则解决了该问题。
iptables -F
iptables -t net -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle-X
然后按照 CENTOS6/RHEL6 的指南,我发出了这些 iptables 命令来设置转发
iptables -A FORWARD -i eth1 -j ACCEPT
iptables -A FORWARD -o eth1 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
混乱开始了。我能够从私有 ping 到公共,使用 tcp 转储我可以确认 IP 地址是否正确伪装。不过我也能够从公共 ping 到私人。
/etc/sysconfig/iptables
这是 Linux 路由器文件的转储
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A FORWARD -i eth1 -j ACCEPT
-A FORWARD -o eth1 -j ACCEPT
COMMIT
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
我尝试过添加拒绝、输入状态相关/已建立。我似乎无法阻止所谓的公共主机窥视专用网络。有任何想法吗?我确信我有什么问题。
答案1
过滤器表的默认策略应该是 DROP,而不是 ACCEPT,否则默认情况下会转发所有数据包。
iptables -P FORWARD DROP
答案2
我终于弄明白了!首先,像以前一样刷新 iptables:
iptables -F
iptables -t net -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X
设置过滤策略
iptables -P OUTPUT ACCEPT
iptables -P INPUT ACCEPT
iptables -P FORWARD DROP
然后设置伪装
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
然后设置一个过滤器以防止路由到您的专用接口。这可以防止公共主机将路由器用作网关。如果没有这个,我可以从公共 ping 路由器的专用接口。
iptables -A INPUT -i eth1 -j ACCEPT
iptables -A INPUT -j DROP
最后,设置转发
iptables -A FORWARD -i eth1 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT