IPTables 转发和 MASQ 不起作用

IPTables 转发和 MASQ 不起作用

我正在尝试为我的 VM 机器设置流量转发和 NAT。我正在设置其中有 2 个 Linux 操作系统,即 Ubuntu 和 CENTOS,我希望流量应该从 Ubuntu 转发到 CENTOS,并且应该与 CENTOS 的另一个接口进行 NAT .请在CENTOS上找到以下配置

ens33 :- Internal Interface
ens34 :- External Interface

CENTOS 和 Ubuntu 已连接(虚拟机中的主机适配器)。以下输出适用于 CENTOS

root@localhost ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.16.251.2    0.0.0.0         UG    101    0        0 ens34
172.16.251.0    0.0.0.0         255.255.255.0   U     101    0        0 ens34
192.168.6.0     0.0.0.0         255.255.255.0   U     100    0        0 ens33

我在 CENTOS 上的 IPtables 中完成了以下流量转发和 NAT 配置

*nat
:PREROUTING ACCEPT [1030:71552]
:INPUT ACCEPT [4:848]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -o eth34 -j MASQUERADE


*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [269:27758]
**-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT**
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
**-A FORWARD -i ens33 -o ens34 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i ens34 -o ens33 -j ACCEPT**
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

cat /proc/sys/net/ipv4/ip_forward
1

我已经验证了流量,其中流量从 Ubuntu 转发到 CENTOS,但看起来 NAT 和转发不起作用

192.168.6.2(Ubuntu机器的IP地址)

03:54:20.331164 IP 192.168.6.2 > 8.8.8.8: ICMP echo request, id 34419, seq 791, length 64
03:54:21.339241 IP 192.168.6.2 > 8.8.8.8: ICMP echo request, id 34419, seq 792, length 64

答案1

您已交换了 FORWARD 规则中的内部和外部接口。在您的设置中,

-A FORWARD -i ens33 -o ens34 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i ens34 -o ens33 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

ens33来自想要打开连接的传入数据包(我假设来自 Ubuntu 机器)将与第一行匹配。但没有建立连接,数据包将被最后一行拒绝。

你需要的是

-A FORWARD -i ens34 -o ens33 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i ens33 -o ens34 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited

或者更好的是,使用占位符创建一个 shell 脚本,如下所示:

INTIF=ens33
EXTIF=ens34
# flush rules
iptables -F FORWARD 
iptables -t nat -F
# rules
iptables -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT
iptables -A FORWARD -j REJECT --reject-with icmp-host-prohibited
iptables -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE
# more rules if required

然后您可以在不同的情况下使用不同的接口重复使用它,而不会感到困惑。

我不知道你想在 INPUT 链中做什么;我建议删除所有这些规则以简化调试。如果转发在没有这些规则的情况下工作,并且您仍然需要在 INPUT 链中执行某些特定操作,请提出一个新问题。

相关内容