web-dev-qa-db-ja.com

NAT Ubuntu 16.04でiptablesを使用しても機能しません

以前はNATサーバー(Google Cloud Platform上に構築)に信頼できるUbuntu 14.04を使用していましたが、最近Ubuntu 16.04 xenialを使用しようとしました。

14.04で行ったのとまったく同じように構成しましたが、NATサーバーとしてDOES N'T WORKとして設定しました。唯一の違いは、OSとライブラリのバージョンです。

設定は非常に簡単で、Googleのドキュメントに記載されています。

  1. IP転送を許可Sudo sysctl -w net.ipv4.ip_forward=1および
  2. Iptables Sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADEを構成します

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

それでおしまい。 Ubuntu 14.04では機能しました。 Ubuntu 16.04ではそうではありませんでした。

誰かが正しく設定するのを手伝ってくれますか?何が欠けているのか、どの点を確認するのかわからない。

前もって感謝します!


追加情報はこちら

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

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

これはsystemd-networkdの変更に関係していると思います。私は最近Ubuntu 16.04で同様のことをしようとしていましたが、インターフェイス自体で転送を有効にする必要があることを説明するWebページを見つけました。現時点ではこのWebページを見つけることができず、いつ変更されたのかわかりません。

したがって、これにより転送が有効になりますが、これに加えて、インターフェースで有効にする必要があります

Sudo sysctl -w net.ipv4.ip_forward=1

転送が有効かどうかを確認するには、次を実行します。

sysctl -a | grep forwarding

Eth0で転送を有効にするには、次を実行します。

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

インターフェイスで転送を有効にすると、net.ipv4.ip_forwardが1に設定されるため、最初の手順は必要ないかもしれないと読んだと思います。この場合、インターフェイスで転送を再度無効にしても、net.ipv4.ip_forwardが0に戻されることはありません。少なくとも、それは私が覚えている方法です。

2
Tobias

ファイアウォールがトラフィックの転送を許可するように設定されていることを確認してください。 Ubuntu 16に切り替えると、ファイアウォールがパケット転送の暗黙的な拒否ポリシーに事前設定されている可能性があります

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

また、再起動後に実行するNATルールを追加したことを確認してください。同じルールを/etc/rc.localに追加します

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