LINUX.ORG.RU
ФорумAdmin

Как настроить NAT?

 , ,


0

1

сколько и каких модулей должно быть загружено в ядро (4.18.9)?
это чтобы проверить этот факт при помощи lsmod

какие настройки конфигурации нужны в ядре для работы iptables?

надо ли указывать USE=«conntrack» для net-filter/iptables и почему он не указан по-умолчанию в профиле?

Почему туториалы по настройке NAT такие длинные и противные (32000 слов)?

у меня простой протокол 7-го уровня с одним соединением. Хочу пронатить с одной машины (которая в интернете со статическим IP) на другую (которая в локалке), на этой другой машине стоит программа-сервер и слушает порт 5556 по протоколу TCP.

★★☆

Последнее исправление: Einstok_Fair (всего исправлений: 3)

Модулей столько, чтобы натились все нужные протоколы.
Как минимум разрешить ходить пакетам между интерфейсами.
Для поддержки сложных протоколов типа ftp, sip и прочего, которое требует более одного соединения да, надо. Хз почему. Человек, ставящий дженту обычно понимает, что он делает и зачем ему нужен тот, или иной флаг.
Nat штука сложная, двумя словами не объяснить, 32 тысячи как раз достаточно.

imul ★★★★★
()

Почему туториалы по настройке NAT такие длинные и противные (32000 слов)?

так это по iptables а не по нату, для ната если не ошибаюсь всего одно правило нужно которое будет заменять ip адреса пакетов для аплинка.

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

для ната если не ошибаюсь всего одно правило нужно которое будет заменять ip адреса пакетов для аплинка.

Ошибаешься. Для Nat нужно столько правил, чтобы работала связь. А сколько конкретно, можно сказать только в конкретном случае.

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

Что мне нужно досказать, чтобы мой случай стал конкретным? мне только IPv4 надо, IPv6 я не умею и не хочу.

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

Опиши, что конкретно ты хочешь сделать. Является ли хост, на котором ты собираешься делать nat, шлюзом по умолчанию для хоста с сервисом на 5556 порту.

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

Для начала включи форвардинг транзитных пакетов.

echo "net.ipv4.ip_forward = 1" > /etc/sysctl.d/ip_forward.conf
sysctl -p /etc/sysctl.d/ip_forward.conf
Затем включи nat:
iptables -t nat -A PREROUTING -p tcp -p tcp --dport 5556 -j DNAT --to-destination <server-address>
Если бы хост с nat не был бы шлюзом по умолчанию, понадобилось бы ещё одно правило. Конечно же, в таблице filеter правила должны позволять прохождение пакетов на 5556 порт твоего сервера.

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

А обратно как будут адреса преобразовываться?
мне казалось, что для этого нужно второе правило:

iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 5556 -j DNAT --to 192.168.0.2:5556
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

или даже точнее что-то типа
iptables -t nat -A POSTROUTING -o eth0 -p tcp --from 192.168.0.2 -j SNAT --to <static IP>
потому что мне не хочется чтобы вся локалка мой трафик кушала.

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

не получается. При перезапуске компьютера-гейта не восстанавливаются правила из файла с сейвом:

пишет:

# systemctl status iptables-restore
● iptables-restore.service - Restore iptables firewall rules
   Loaded: loaded (/lib/systemd/system/iptables-restore.service; enabled; vendor preset: disabled)
   Active: inactive (dead) since Mon 2018-11-05 10:48:54 UTC; 3s ago
  Process: 3961 ExecStart=/sbin/iptables-restore -w -- /var/lib/iptables/rules-save (code=exited, status=0/SUCCESS)
 Main PID: 3961 (code=exited, status=0/SUCCESS)

Nov 05 10:48:54 gate systemd[1]: Starting Restore iptables firewall rules...
Nov 05 10:48:54 gate iptables-restore[3961]: /sbin/iptables-restore: invalid option -- 'w'
Nov 05 10:48:54 gate systemd[1]: Started Restore iptables firewall rules.

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

Потому что файл, в котором хранятся правила iptables, дистрибутивозависимый. Где хранится у тебя - гугли. Для redhat-подобных дистрибутивов надо сохранить правила командой iptables-save > /etc/sysconfig/iptablesКстати, второе правило надо только в том случае, если ты хочешь, чтобы работали исходящие соединения с твоего сервера наружу. Просто для проброса порта на внутренний сервер хватит того правила, которое я написал. А обратное преобразование сделает conntrack.

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

обратное преобразование сделает conntrack.

а по-моему не сможет, для этого ему разве не нужно ещё 2-3 правила?

кроме того, что делать если нет пути?

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

Тогда ты должен маскарадить все запросы соединения на 5556. В итоге, тебе нужны такие правила:

iptables -t nat -A PREROUTING -p tcp --dport 5556 -j DNAT --to-destination <server-address>
iptables -t nat -A POSTROUTING -p tcp --dport 5556 -d <server-address> -j MASQUERADE

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

а по-моему не сможет, для этого ему разве не нужно ещё 2-3 правила?

нет

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

разве я должен маскарадить, а не правильно роутить?

я думал, что MASQUERADE это такая сокращенная запись для SNAT

как машина-сервер узнает, куда отправлять ответные пакеты, ну что на gate, а не как обычно?

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

разве я должен маскарадить, а не правильно роутить?

iptables за роутинг не отвечает

я думал, что MASQUERADE это такая сокращенная запись для SNAT

Да, это более универсальная запись для SNAT, не зависящая от ip адреса на интерфейсе. Если хочешь, делай SNAT, он будет работать чуть быстрее.

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

как машина-сервер узнает, куда отправлять ответные пакеты, ну что на gate, а не как обычно?

Ты только что сказал, что хост с нат не является шлюзом. По этому, я написал второе правило, которое для входящих из интернет пакетов меняет адрес отправителя на адрес хоста с нат. По этому, ответный пакет уйдёт на комп с нат. Далее, он будет обработан в соответствии с записями в conntrack.

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

да, всё получилось с SNAT (я неправильный адрес указывал - внешний, а надо было - внутренний).

я поставил в качестве сервера апач и он виден снаружи из firefox

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

С апачем - плохая идея менять адрес отправителя для входящих пакетов. Так ты лишаешь апач информации о адресе посетителя. Так что Nat надо делать на хосте, который указан шлюзом для твоего сервера.

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

Апач у меня для тестов.
Но я тут выяснил, что программе нужно и исходящее соединение...

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