Я раньше использовал надежного человека Ubuntu 14.04 для нашего сервера NAT (основывайтесь на Платформе Google Cloud), но недавно я попытался использовать гостеприимную Ubuntu 16.04.
Я настроил отлично то же, поскольку я сделал в 14,04, но это не РАБОТАЕТ сервером NAT. Единственной разницей являются версии ОС и библиотек.
Конфигурация довольно проста, который описан в документации Google:
sudo sysctl -w net.ipv4.ip_forward=1
и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
Я полагаю, что это имеет отношение к изменению systemd-networkd. Я пытался выполнить что-то подобное недавно на Ubuntu 16.04 и споткнулся через веб-страницу, объяснив, что передача должна быть включена в самом интерфейсе. Я не могу найти эту веб-страницу в данный момент, и я не знаю, когда это было изменено.
, Таким образом, это позволит передать, но в дополнение к этому, это должно быть включено в интерфейсе
sudo sysctl -w net.ipv4.ip_forward=1
, Чтобы видеть, включена ли передача или нет, выполняет это:
sysctl -a | grep forwarding
, Чтобы позволить передать на eth0, выполните это:
sudo sysctl net.ipv4.conf.eth0.forwarding=1
я полагаю, что считал, что включение передачи в интерфейсе установит сеть ipv4.ip_forward на 1, таким образом, первый шаг не мог бы быть необходимым. Если это верно, отключение передающий снова в интерфейсе не вернется сеть ipv4.ip_forward назад к 0. По крайней мере это - то, как я помню это.
Убедитесь, что вы установили брандмауэр, чтобы разрешить пересылку трафика. Возможно, что при переключении на 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