CentOS 6 iptables nat 路由器

CentOS 6 iptables nat 路由器

我正在尝试为实验室设置 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

相关内容