NAT usando iptables no Ubuntu 16.04 não funciona

5

Eu costumava usar o Ubuntu 14.04 confiável para o nosso servidor NAT (baseado no Google Cloud Platform), mas recentemente eu tentei usar o Ubuntu 16.04 xenial.

Eu configurei perfeitamente como fiz em 14.04, mas NÃO FUNCIONA como servidor NAT. A única diferença é as versões do sistema operacional e das bibliotecas.

A configuração é bem simples, descrita na documentação do Google:

  1. Permitir encaminhamento de IP sudo sysctl -w net.ipv4.ip_forward=1 e
  2. Configure o iptables sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

link

É isso. No Ubuntu 14.04, funcionou. No Ubuntu 16.04, isso não aconteceu.

Alguém pode me ajudar a configurá-lo corretamente? Não tenho ideia do que estou perdendo nem de que ponto devo verificar.

Obrigado antecipadamente!

Aqui estão as informações adicionais

No Ubuntu 14.04

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.5 LTS"
$
$ sudo dpkg -l iptables
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name             Version       Architecture  Description
+++-================-=============-=============-=====================================
ii  iptables         1.4.21-1ubunt amd64         administration tools for packet filte
$
$ sudo iptables -v -x -n -L
Chain INPUT (policy ACCEPT 5898 packets, 944634 bytes)
    pkts      bytes target     prot opt in     out     source               destination
    5898   944634 sshguard   all  --  *      *       0.0.0.0/0            0.0.0.0/0

Chain FORWARD (policy ACCEPT 40 packets, 3444 bytes)
    pkts      bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 5658 packets, 526971 bytes)
    pkts      bytes target     prot opt in     out     source               destination

Chain sshguard (1 references)
    pkts      bytes target     prot opt in     out     source               destination
$
$ sudo iptables -t nat -v -x -n -L
Chain PREROUTING (policy ACCEPT 18 packets, 3471 bytes)
    pkts      bytes target     prot opt in     out     source               destination

Chain INPUT (policy ACCEPT 14 packets, 3231 bytes)
    pkts      bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 797 packets, 48528 bytes)
    pkts      bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
    pkts      bytes target     prot opt in     out     source               destination
     801    48768 MASQUERADE  all  --  *      eth0    0.0.0.0/0            0.0.0.0/0
$
$ ifconfig
eth0      Link encap:Ethernet  HWaddr 12:34:56:78:90:ab
          inet addr:10.146.0.3  Bcast:10.146.0.3  Mask:255.255.255.255
          inet6 addr: fe80::4001:aff:fe92:3/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1460  Metric:1
          RX packets:6379 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6099 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1080290 (1.0 MB)  TX bytes:644140 (644.1 KB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
$
$ sudo sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1

No Ubuntu 16.04

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.2 LTS"
$
$ sudo dpkg -l iptables
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name             Version       Architecture  Description
+++-================-=============-=============-=====================================
ii  iptables         1.6.0-2ubuntu amd64         administration tools for packet filte
$
$ sudo iptables -L -v -x -n
Chain INPUT (policy ACCEPT 474 packets, 44440 bytes)
    pkts      bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
    pkts      bytes target     prot opt in     out     source               destination
      16      960 ACCEPT     all  --  *      ens4    0.0.0.0/0            0.0.0.0/0
       0        0 ACCEPT     all  --  ens4   *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED

Chain OUTPUT (policy ACCEPT 355 packets, 38412 bytes)
    pkts      bytes target     prot opt in     out     source               destination
$
$ sudo iptables -t nat -v -x -n -L
Chain PREROUTING (policy ACCEPT 9 packets, 3013 bytes)
    pkts      bytes target     prot opt in     out     source               destination

Chain INPUT (policy ACCEPT 6 packets, 2833 bytes)
    pkts      bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 756 packets, 46153 bytes)
    pkts      bytes target     prot opt in     out     source               destination

Chain POSTROUTING (policy ACCEPT 759 packets, 46333 bytes)
    pkts      bytes target     prot opt in     out     source               destination
       0        0 MASQUERADE  all  --  *      ens4    0.0.0.0/0            0.0.0.0/0
$
$ sudo ifconfig
ens4      Link encap:Ethernet  HWaddr 12:34:56:78:90:ab
          inet addr:10.146.0.4  Bcast:10.146.0.4  Mask:255.255.255.255
          inet6 addr: fe80::4001:aff:fe92:4/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1460  Metric:1
          RX packets:6274 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6064 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1043141 (1.0 MB)  TX bytes:641746 (641.7 KB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)
$
$ sudo sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
    
por Shinichi TAMURA 30.03.2017 / 14:51

2 respostas

2

Eu acredito que isso tenha a ver com uma mudança de systemd-networkd. Eu estava tentando realizar algo semelhante recentemente no Ubuntu 16.04, e deparei com uma página da Web explicando que o encaminhamento deve ser ativado na própria interface. Não consigo encontrar esta página no momento e não sei quando isso foi alterado.

Então, isso permitirá o encaminhamento, mas, além disso, ele precisa estar ativado na interface

sudo sysctl -w net.ipv4.ip_forward=1

Para ver se o encaminhamento está ativado ou não, execute isto:

sysctl -a | grep forwarding

Para habilitar o encaminhamento na eth0, execute isto:

sudo sysctl net.ipv4.conf.eth0.forwarding=1

Acredito que li que o encaminhamento de ativação em uma interface definirá net.ipv4.ip_forward como 1, portanto, a primeira etapa pode não ser necessária. Se esse for o caso, desabilitar o encaminhamento novamente na interface não reverterá o net.ipv4.ip_forward de volta para 0. Pelo menos é assim que eu me lembro disso.

    
por Tobias 08.06.2017 / 10:13
0

Certifique-se de ter definido o firewall para permitir o encaminhamento do tráfego. É possível mudar para o Ubuntu 16 que o firewall é pré-configurado para uma política de negação implícita para encaminhamento de pacotes

sudo iptables -A FORWARD -o eth0 -j ACCEPT
sudo iptables -A FORWARD -m state \
--state ESTABLISHED,RELATED -i eth0 -j ACCEPT

Certifique-se também de ter adicionado sua regra NAT para ser executada após a reinicialização. Adicione a mesma regra ao /etc/rc.local

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    
por hamiheim 30.03.2017 / 15:07