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

iptables No chain/target/match by that name

 ,


1

2

Доброго всем времени суток. Есть машинка с двумя сетками и Дебианом нет-инсталл тестинг. Сетка enp2s2 - смотрит в мир и имеет статичный провайдерский ip Сетка enp2s1 - смотрит в локалку на 20 компов и имеет статичный ip 192.168.1.9 Задача вроде бы тривиальная - раздать интернет. Мои действия: iptables -F iptables -t nat -F iptables -t mangle -F всё без ошибок далее iptables -A FORWARD -i enp2s1 -o enp2s2 -s 192.168.1.0/30 -j ACCEPT $ iptables -A FORWARD -i enp2s2 -o enp2s1 -d 192.168.1.0/30 -j ACCEPT $ iptables -P FORWARD DROP Транзит тоже настроился без ошибок. А вот далее: iptables -A POSTROUTING -s 192.168.1.0/30 -o enp2s2 -j SNAT --to-source провайдерский ip и получаем No chain/target/match by that name

Погуглил проблему - «вы пытаетесь использовать функционал, отсутствующий в ядре системы». Ок, допустим, в ядрес тестовой сборки Дебиана, нет NATа... Хотя и сомнительно, но допустим. Подскажите, мне теперь переустановить Дебиана из стабильной ветки? Или таки я где-то с правилом накосячил? Заранее благодарен за подсказку.


iptables -A POSTROUTING -s 192.168.1.0/30 -o enp2s2 -j SNAT --to-source провайдерский ip

Надо так:

iptables -t nat -A POSTROUTING -s 192.168.1.0/30 -o enp2s2 -j SNAT --to-source провайдерский ip

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

спасибо, через пару часов проверю - отпишусь

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

А ещё вопросец: обязательно ли -t имя_правила указывать каждый раз при добавлении новой таблицы?

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

Если не указано иное, по умолчанию подставляется -t filter. Т.к. nat, mangle и raw используются куда реже чем filter.

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

Понятно. Спасибо всем за участие.

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

Продвижение пакетов между интерфейсами разрешено?

/proc/sys/net/ipv4/ip_forward
или
sysctl -w net.ipv4.ip_forward=1
Для постоянного применения нужно либо писать в postup сетевого интерфейса указанную команду или вносить изменения в /etc/sysctl.conf.
/etc/sysctl.conf:
net.ipv4.ip_forward = 1

Ну и заодно покажи вывод

iptables-save

В тегах [code][/code].

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

А для работы с ДНСами ничего не нужно ставить? У меня на шлюзе стоит версия Net-install, минимальная. Может каких-то пакетов не хватает?

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

Значит правила не загружены, вывод iptables-save не должен быть пустым, как минимум вот таким:

# iptables-save 
# Generated by iptables-save v1.4.21 on Wed Feb  1 13:16:26 2017
*mangle
:PREROUTING ACCEPT [1014055:137349091]
:INPUT ACCEPT [1005081:136098448]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [263549:2634716345]
:POSTROUTING ACCEPT [264032:2634809892]
COMMIT
# Completed on Wed Feb  1 13:16:26 2017
# Generated by iptables-save v1.4.21 on Wed Feb  1 13:16:26 2017
*filter
:INPUT ACCEPT [1005081:136098448]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [263549:2634716345]
COMMIT
# Completed on Wed Feb  1 13:16:26 2017

даже если никакие правила до этого не грузились.

Сохрани вот это в файл:

# Generated by iptables-save v1.4.21 on Wed Feb  1 13:17:49 2017
*nat
:PREROUTING ACCEPT [5:240]
:INPUT ACCEPT [5:240]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 192.168.1.0/30 -j MASQUERADE
COMMIT
# Completed on Wed Feb  1 13:17:49 2017
# Generated by iptables-save v1.4.21 on Wed Feb  1 13:17:49 2017
*mangle
:PREROUTING ACCEPT [1014825:137455936]
:INPUT ACCEPT [1005822:136199745]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [263905:2634758530]
:POSTROUTING ACCEPT [264388:2634852077]
COMMIT
# Completed on Wed Feb  1 13:17:49 2017
# Generated by iptables-save v1.4.21 on Wed Feb  1 13:17:49 2017
*filter
:INPUT ACCEPT [1005822:136199745]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [263905:2634758530]
COMMIT
# Completed on Wed Feb  1 13:17:49 2017
и загрузи через iptables-restore, всё должно работать.

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

Я iptables настраивал по инструкции, там рекомендовалось первым делом очистить список правил.

Я ввёл iptables -L -v -n и получилось вот что:

Chain INPUT (policy ACCEPT 0 packets, 0 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

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

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

Замечательно, загрузи приведённые мной правила из второго блока и у тебя всё будет работать. Ну либо поправь строчку заместо маскарадинга на снат.

Даже после очистки правил вывод iptables-save должен соответствовать тому, что я привёл в первом блоке.

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

Нет, сохранить это в файл и загрузить утилитой iptables-restore

iptables-restore file

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

Всё понял. Сделаю-отпишусь. Ещё один ламерский вопросик - в системе я нигде не нашёл каталога, где должен храниться файл с настройками iptables, подскажите пожалуйста куда лучше положить файлик, который я сейчас создам?

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

и будут сами применяться при запуске шлюза?

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

Понял. Спасибо вам за ваше терпение и в возне с чайником :-) А таки по автозапуску правил: точно не нужно ничего вписывать в ./etc/network/interfaces ?

Например я создаю файлик с правилами, называю его iptables_rules, запускаю iptables-save > iptables_rules, правила сохранились и применились. А теперь, чтобы правила сами применялись при запуске шлюза, нужнол ли прописывать в ./etc/network/interfaces то-нибудь навроде: pre-up iptables-restore < /etc/iptables_rules ???

Просто во многих инструкциях это упоминается.

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

А таки по автозапуску правил: точно не нужно ничего вписывать в ./etc/network/interfaces ?

Если у тебя Debian, то почитай его wiki по настройке iptables, в Gentoo, CentOS у сценария запуска iptables есть параметр save, который сохраняет правила для их загрузки во время запуска. В Debian, скорее всего, есть такой же параметр, если

/etc/init.d/iptables save
отработал - значит есть.

Если не отработал - пиши в pre-up.

Просто во многих инструкциях это упоминается.

Просто написавшие эти многие инструкции перепечатывали их с других инструкций и сами не читали документацию.

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

Всё понятно. Спасибо ещё раз. Сделаю - отпишусь

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

Доброго времени суток ещё раз. Создал файл с вашими настройками. Всё работает. Спасибо вам.

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

Мне теперь нужно немного усложнить список правил, блочить ресурсы по IP, позже - фильтровать контент... Я нашёл неплохую (на мой взгляд) инструкцию тут но при запуске списка правил, который приведён там в виде примера iptables у меня ругается на криво заданный диапазон IP-адресов локалки. Говорит что Invalid mask «30». Всё остальное, перечисленноев скрипте, мне понятно и у меня работает. Не могли бы вы объяснить мне что не так там с маской локальных адресов?

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

я же правильно понимаю что в 192.168.1.0/110 нужно указывать диапазон IP-адресов в локальной сети, которая будет выходить в инет? Или там нужно указать IP-адрес сетевого интерфейса, который смотрит в локалку?

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

тут есть небольшая неточность - в топике написано «30», потому что тогда диапазон ограничивался всего 30 машинами. позже, я писал уже из другой конторы, где такая же история, только машин в сети больше. И там конечный адрес в диапазоне «110». но я кажется понял вас, когда заглянул в настройки сетевой платы. Там указана маска сети 192.168.1.0, а адрес, собственно сетевой платы, указан именно как 192.168.1.0/9 Думаю что просто в Линуксе таким образом записывается адрес самой сетевой платы. То есть указывается маска сети и адрес самой платы. Верно?

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