LINUX.ORG.RU
решено ФорумAdmin

не работает NAT

 , ,


0

1

Доброго всем времени суток. Есть машинка с двумя сетками и Дебианом нет-инсталл тестинг. Сетка enp2s2 - смотрит в мир и имеет статичный провайдерский ip Сетка enp2s1 - смотрит в локалку на 20 компов и имеет статичный ip 192.168.1.9 Задача вроде бы тривиальная - раздать интернет. Для этого, в течение 3 суток изучено всё найдённое нигмой (пользоваться гуглом не позволяют настройки безопасности национального оператора связи) по iptables и написан свод правил, который лежит тут

Списочек корректно отрабатывается. В выводе ошибок нет, однако не работает NAT. Пинги с шлюза в инет - есть, в локалку - есть, из локалки до шлюза - нету.

Прошу - ткните пальцем в ошибку.

Заранее благодарен

Ответ на: комментарий от CHIPOK

# NAT iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o enp2s2 -j SNAT --to-source внешний_провайдерский_ip

Nehtez ()
# Открываем доступ из интернета к виндовому серваку по RDP
iptables -A PREROUTING -i enp2s2 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.1.110

В этом правиле ошибка, убери его.

kostik87 ★★★★★ ()
Ответ на: комментарий от kostik87

я вообще-то не был уверен на счёт правил открывающих транзитный трафик

Nehtez ()
Ответ на: комментарий от Nehtez
iptables -t nat -A PREROUTING -i enp2s2 -p tcp -m tcp --dport 3389 -j DNAT --to-destination 192.168.1.110

А так, хз, только что выполнил твой скрипт, у меня всё работает, я только вместо DNAT использовать MASQUERADE.

kostik87 ★★★★★ ()
Ответ на: комментарий от kostik87
-m tcp

Самому стало интересно, не в этом ли ошибка?

Twissel ★★★★★ ()
Ответ на: комментарий от Nehtez

Посмотри, я написал выше:

А так, хз, только что выполнил твой скрипт, у меня всё работает, я только вместо SNAT использовать MASQUERADE.

Почему у тебя не работает - не знаю. Проверял на виртуалке, подключил её через мост и указал шлюзом host систему, интеренет на виртуалке есть, если перегрузить правила без маскарадинга - нет.

Проверяй, что указана правильная подсеть, ну и, возможно, ты так же заблокировал DNS, проверь пингуется ли с клиентов DNS от Google, т.е. 8.8.8.8.

kostik87 ★★★★★ ()
Ответ на: комментарий от kostik87

в том то и косяк - нету пингов из локалки. Ни до шлюза, ни, тем более, в мир. ДНСы провайдерские прописаны в /etc/resolv.conf

Nehtez ()
Ответ на: комментарий от kostik87

содержимое /etc/network/interfaces.d

# loopback network interface
auto lo
iface to inet loopback

# Primary network interface
allow-hotplug enp2s2
auto enp2s2
iface enp2s2 inet static
address провайдерский_IP
gateway провайдерский_gateway
netmask 255.255.255.192

# Secondary network interface
allow-hotplug enp2s1
auto enp2s1
iface enp2s1 inet static
address 192.168.1.9
netmask 255.255.255.0
network 192.168.1.0

Nehtez ()
Ответ на: комментарий от kostik87

пробовал уже - не помогает. Проблема, похоже, именно в этом правиле. А принципиально ли где прописаны ДНСы? В /etc/resolv.conf или в /etc/network/interfaces?

Nehtez ()
Ответ на: комментарий от Nehtez

А принципиально ли где прописаны ДНСы? В /etc/resolv.conf или в /etc/network/interfaces?

Настройки DNS сервера, к которому будут идти запросы в Linux (Unix) системах находятся в файле /etc/resolv.conf, файл /etc/network/interfaces - это частный случай файла настроек сервиса конфигурирования сети, после запуска этого сервиса в соответствие с файлом настроек данные о DNS сервере будут записаны в файл /etc/resolv.conf.

пробовал уже - не помогает.

Если у тебя с одним твоим правилом для NAT ничего не работает, т.е. вывод iptables-save должен быть примерно такой:

# Generated by iptables-save v1.4.21 on Mon Feb  6 10:39:21 2017
*nat
:PREROUTING ACCEPT [12:1021]
:INPUT ACCEPT [8:684]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 192.168.1.0/24 -o enp2s2 -j SNAT --to-source внешний_провайдерский_ip
COMMIT
# Completed on Mon Feb  6 10:39:21 2017
# Generated by iptables-save v1.4.21 on Mon Feb  6 10:39:21 2017
*mangle
:PREROUTING ACCEPT [56672:32801227]
:INPUT ACCEPT [55267:32619386]
:FORWARD ACCEPT [20:1849]
:OUTPUT ACCEPT [31112:3468277]
:POSTROUTING ACCEPT [31111:3413173]
COMMIT
# Completed on Mon Feb  6 10:39:21 2017
# Generated by iptables-save v1.4.21 on Mon Feb  6 10:39:21 2017
*filter
:INPUT ACCEPT [54378:32529676]
:FORWARD ACCEPT [9:1217]
:OUTPUT ACCEPT [30597:3297512]
COMMIT
# Completed on Mon Feb  6 10:39:21 2017
значит ты неправильно указал в нём сеть или внешний IP, остальные таблицы в данном примере должны быть пусты, а полотики прохождения пакетов ACCEPT.

Пробуй использовать MASQUERADE.

iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE

Когда при такой конфигурации на клиентах будет доступ во внешнюю сеть крути дальше.

kostik87 ★★★★★ ()
Ответ на: комментарий от kostik87

точно такой вывод у меня и есть... внешний IP - стопудов правильный, потому что сам шлюз в инет ходит и в локалку тоже.

Nehtez ()
Ответ на: комментарий от Nehtez

а что у вас для транзитного траф. такое?:

iptables -A FORWARD -i enp2s2 -o enp2s1 -d 192.168.1.0/24 -j ACCEPT
#это у вас из интернета в локальную сеть, потом у вас такое же правило на отброс пакетов идет, но оно уже не будет работать:
iptables -A FORWARD -i enp2s2 -o enp2s1 -j REJECT
и показывайте лучше сразу iptables-save. и вот это лучше в начале поместить;
iptables -A FORWARD -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
п.с. сам иногда путаюсь с этим транзитом.

ving2 ()
Ответ на: комментарий от ving2

iptables -A FORWARD -p all -m state --state ESTABLISHED,RELATED -j ACCEPT нужно поместить первым правилом в блоке «# Разрешаем все установленные соединения и производные от них»?

Nehtez ()
Ответ на: комментарий от Nehtez

я имел ввиду что наверно лучше пусть так будет:

iptables -A FORWARD -p all -m state --state ESTABLISHED,RELATED -j ACCEPT

а потом вот это:
iptables -A FORWARD -i enp2s1 -o enp2s2 -s 192.168.1.0/24 -j ACCEPT

и вот это уже устарело

 -m state --state
-m conntrack --ctstate

ving2 ()
Ответ на: комментарий от ving2

а так ли уж нужен транзит? Не обойдётся разве простым разрешением всего трафика lo и сетевухи, что в локалку смотрит?

Nehtez ()
Ответ на: комментарий от ving2

и вот это уже устарело

И давно? (я серьезно, ман по этому поводу ничего не говорит)
The «state» extension is a subset of the «conntrack» module. «state» allows access to the connection tracking state for this packet.
что-то типа -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT 100% рабочий вариант

anc ★★★★★ ()
Последнее исправление: anc (всего исправлений: 1)
Ответ на: комментарий от anc

может быть у него есть информация из первоисточников. впрочем не суть, как подмечено выше, работать должно и с устаревшими параметрами.

Nehtez ()
Ответ на: комментарий от Nehtez

И посмотрите еще conntrack -L, туда в том числе и обращения по локальному адресу попадать должны, например когда пингуете роутер из локалки

anc ★★★★★ ()
Ответ на: комментарий от ving2

Абсолютно не авторитетно. Выше я писал про ман от iptables 1.6.0 который вышел в конце 2015-го года, в нем таких слов нет. А ваша ссылка на статью от 2011го.

anc ★★★★★ ()
Ответ на: комментарий от anc

Вот это пиште iptables начиная с 1.4.16.

WARNING: The state match is obsolete. Use conntrack instead.

В 1.4.18, чтобы не ломать скрипты, state сделали алиасом для conntrack на уровне команды iptables, на уровне ядра остался только match conntrack. WARNING, вроде бы, потом убрали.

mky ★★★★★ ()
Ответ на: комментарий от ving2

Повторю еще раз The «state» extension is a subset of the «conntrack» module. продолжая копипасту из мана

              Where  state  is a comma separated list of the connection states
              to match. Only a subset of the states unterstood by  "conntrack"
              are recognized: INVALID, ESTABLISHED, NEW, RELATED or UNTRACKED.
              For their description, see the "conntrack" heading in this  man-
              page.
он не устаревший, он включает в себя часть того что может conntrack. Для задачи ТС этой части вполне хватает.

anc ★★★★★ ()
Ответ на: комментарий от mky

Ну возможно я был не до конца прав. Видимо был момент с WARNING, только явно мимо меня прошел, в смысле перепрыгнул те версии от старых к новым.

anc ★★★★★ ()
Ответ на: комментарий от anc

эта статья могла правиться автором, так что если она была написана в 2011 г это еще ни о чем ни говорит. Впрочем пусть ТС пишет как хочет.

ving2 ()
Ответ на: комментарий от kostik87

А вот ещё вопрос, есть у меня другая конторка, где почти такая же ситуёвина (шлюзик, сетка в инет, сетка в локалку) только там фиксированный внешний IP, выданный провайдером, прописан в мозгах радиомодема. И у сетки, которая подключена к модему, IP-адреса быть не должно в принципе. Иначе связь моментом отваливается. Как прописать в правилах такой расклад, чтобы NAT работал?

Nehtez ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.