it-swarm.com.de

NAT mit iptables unter Ubuntu 16.04 funktioniert nicht

Ich habe Ubuntu 14.04 Trusty für unseren NAT Server verwendet (auf Basis von Google Cloud Platform), aber kürzlich habe ich versucht, Ubuntu 16.04 Xenial zu verwenden.

Ich habe genau das gleiche wie in 14.04 konfiguriert, aber es FUNKTIONIERT NICHT als NAT Server. Der einzige Unterschied besteht in den Versionen des Betriebssystems und der Bibliotheken.

Die Konfiguration ist recht einfach und wird in der Dokumentation von Google beschrieben:

  1. IP-Weiterleitung zulassen Sudo sysctl -w net.ipv4.ip_forward=1 und
  2. Konfigurieren Sie die iptables Sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

https://cloud.google.com/compute/docs/networking#natgateway

Das ist es. In Ubuntu 14.04 hat es funktioniert. In Ubuntu 16.04 war dies nicht der Fall.

Kann mir jemand helfen, es richtig zu konfigurieren? Ich habe keine Ahnung, was ich vermisse oder welchen Punkt ich überprüfen sollte.

Danke im Voraus!


Hier sind die zusätzlichen Infos

In 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

In 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
5
Shinichi TAMURA

Ich glaube, das hat mit einer System-Netzwerk-Änderung zu tun. Ich habe kürzlich unter Ubuntu 16.04 versucht, etwas Ähnliches zu erreichen, und bin über eine Webseite gestolpert, auf der erklärt wurde, dass die Weiterleitung auf der Benutzeroberfläche selbst aktiviert werden muss. Ich kann diese Webseite derzeit nicht finden und weiß nicht, wann dies geändert wurde.

Damit wird die Weiterleitung aktiviert, aber zusätzlich muss sie auf der Schnittstelle aktiviert werden

Sudo sysctl -w net.ipv4.ip_forward=1

Führen Sie Folgendes aus, um festzustellen, ob die Weiterleitung aktiviert ist oder nicht:

sysctl -a | grep forwarding

Führen Sie Folgendes aus, um die Weiterleitung auf eth0 zu aktivieren:

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

Ich glaube, ich habe gelesen, dass das Aktivieren der Weiterleitung auf einer Schnittstelle net.ipv4.ip_forward auf 1 setzt, sodass der erste Schritt möglicherweise nicht erforderlich ist. In diesem Fall wird net.ipv4.ip_forward durch erneutes Deaktivieren der Weiterleitung auf der Schnittstelle nicht auf 0 zurückgesetzt. Zumindest erinnere ich mich daran.

2
Tobias

Stellen Sie sicher, dass Sie die Firewall so eingestellt haben, dass der Datenverkehr weitergeleitet wird. Es ist möglich, dass beim Umstieg auf Ubuntu 16 die Firewall auf eine implizite Ablehnungsrichtlinie für die Paketweiterleitung vorkonfiguriert ist

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

Stellen Sie außerdem sicher, dass Sie Ihre NAT -Regel hinzugefügt haben, die nach dem Neustart ausgeführt werden soll. Fügen Sie /etc/rc.local dieselbe Regel hinzu

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
1
Gansheim