Não vejo na sua configuração onde você define a opção de mascarada para a sua interface externa.
firewall-cmd --zone=external --add-masquerade --permanent
Isso é o que funcionou para mim quando comecei a jogar com o infame firewalld
Eu configurei o nat para tornar o meu CentOS 7 em um roteador. Eu usei o firewalld para fazer isso. Mas infelizmente não funciona. Não tenho ideia do que causa o problema. Eu tentei a mesma configuração no Virtual Box e está funcionando. Se eu fiz a mesma configuração no servidor de produção, não.
Eth0 ip– meu ip estático
mask-255.255.252.0
gateway-meu gateway ISP
eth1
ip-192.168.1.30
mask-255.255.255.0
1) Encaminhamento de pacotes ativado
vi /etc/sysctl.conf
added “net.ipv4.ip_forward=1”
sysctl –p
2) Configurando o NAT no firewalld
i) Integrando a interface “eth1” à zona interna
Firewall-cmd --change-interface=eth1 --zone=internal --permanent
• O mascaramento estava "desativado" no padrão
ii) Integrando a interface “eth0” à zona externa
Firewall-cmd --change-interface=eth0 --zone=external --permanent
iii) "zona interna" alterada como a zona padrão
Firewall-cmd --set-default-sone=internal --permanent
iv) Adicionado DNS para passar por "zona interna"
Firewall-cmd --zone=internal --add-service=dns –-permanent
3) Salva a configuração do firewall
Firewall-cmd --reload
Firewall-cmd --complete-reload
4) Também tentei no 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
Não vejo na sua configuração onde você define a opção de mascarada para a sua interface externa.
firewall-cmd --zone=external --add-masquerade --permanent
Isso é o que funcionou para mim quando comecei a jogar com o infame firewalld
Eu acho que você precisa configurar masquerade na zona interna e não externo.
Admito que eu ainda não descobri o firewalld mas o CentOS 7.3 rodando o IPTables, eu pude NAT um pedido externo para o 8806 no IP interno na porta 3306 para conexões mysql, com a seguinte configuração:
[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
Observe que o mascaramento é definido no tráfego de saída da eth1 (minha interface interna).
Aqui está o tipo de laboratório de 3 servidores:
[cliente] - > eth0 (público) - > porta mysql 8806 - > eth0 (público) [firewall-dnat] eth1 (interno) - > mysqlport 3306 - > eth1 (interno) db1 (mariadb)
Espero que ajude.