NAT 在 CentOS 7(Firewalld)上不起作用

NAT 在 CentOS 7(Firewalld)上不起作用

我已经配置了 nat,使我的 CentOS 7 成为路由器。我使用过防火墙来做到这一点。但不幸的是,它不起作用。我不知道是什么导致了这个问题。我在 Virtual Box 中尝试了相同的配置,它可以正常工作。如果我在生产服务器中执行相同的配置,它就不会正常工作。

Eth0 ip – 我的静态 ip

掩码-255.255.252.0

网关 - 我的 ISP 网关

eth1

ip-192.168.1.30

掩码-255.255.255.0

1)启用数据包转发

vi /etc/sysctl.conf

added “net.ipv4.ip_forward=1”

sysctl –p 

2)在firewalld中配置NAT

i)将接口“eth1”集成到内部区域

Firewall-cmd --change-interface=eth1 --zone=internal --permanent

• 默认情况下,伪装处于“关闭”状态

ii)将接口“eth0”集成到外部区域

Firewall-cmd --change-interface=eth0 --zone=external --permanent

iii) 将“内部区域”更改为默认区域

Firewall-cmd --set-default-sone=internal --permanent

iv) 添加 DNS 以通过“内部区域”

Firewall-cmd --zone=internal --add-service=dns –-permanent

3)保存防火墙配置

Firewall-cmd --reload

Firewall-cmd --complete-reload

4)也在 iptables 中尝试过

Iptables –t nat –A POSTROUTING –o eth0 –j MASQUERADE

Iptables –A FORWARD –i eth1 –j ACCEPT

Echo > 1 /proc/sysc/net/ipv4/ip_forward

Service iptables restart

答案1

我没有在您的配置中看到为外部接口设置伪装选项的位置。

firewall-cmd --zone=external --add-masquerade --permanent

当我开始玩臭名昭著的firewalld

答案2

我认为您需要在内部区域而不是外部区域设置伪装。

诚然,我还没有弄清楚防火墙,但在运行 IPTables 的 CentOS 7.3 中,我能够将对 8806 的外部请求 NAT 到内部 IP 上的端口 3306 以进行 mysql 连接,配置如下:

[root@firewall-dnat ~]# cat /etc/sysconfig/iptables
# Generated by iptables-save v1.4.21 on Tue Mar 7 20:06:21 2017
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [343:41670]
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m conntrack --ctstate NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -i eth1 -j ACCEPT
-A FORWARD -o eth1 -j ACCEPT
-A FORWARD -i eth0 -p tcp -m tcp --dport 8806 -j ACCEPT
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Completed on Tue Mar 7 20:06:21 2017
# Generated by iptables-save v1.4.21 on Tue Mar 7 20:06:21 2017
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [1:76]
:POSTROUTING ACCEPT [1:76]
-A PREROUTING -i eth0 -p tcp -m tcp --dport 8806 -j DNAT --to-destination 10.208.135.106:3306
-A POSTROUTING -o eth1 -j MASQUERADE
COMMIT
# Completed on Tue Mar 7 20:06:21 2017

注意现在在 eth1(我的内部接口)的出站流量上设置了伪装。

以下是 3 台服务器实验室的样子:

[客户端] -> eth0(公共)-> mysql 端口 8806 -> eth0(公共)[防火墙-dnat] eth1(内部)-> mysqlport 3306 -> eth1(内部)db1(mariadb)

希望有所帮助。

相关内容