Вопрос или проблема
У нас есть простой маршрутизатор с NAT симметричного типа, но поскольку этот маршрутизатор не предоставляет нам интерфейс для отладки, мы не можем выяснить, доходит ли конкретный пакет до NAT или нет.
Таким образом, мы хотим настроить компьютер на LINUX, чтобы он стал маршрутизатором с симметричным NAT, таким образом мы сможем захватывать все пакеты к этому «NAT» и получать необходимую информацию. Как мы можем это сделать на linux (система Fedora, ядро 2.6.xx)?
Чтобы настроить машину с linux в качестве маршрутизатора, вам нужно выполнить следующее
1- Включите пересылку на устройстве с помощью
echo 1 > /proc/sys/net/ipv4/ip_forward
Предполагая, что ваш публичный интерфейс — eth1, а локальный интерфейс — eth0
2- Настройте правило NAT с помощью:
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
3- Разрешите трафик с eth0:
iptables -A INPUT -i eth0 -j ACCEPT
4- Разрешите установленные соединения с публичного интерфейса.
iptables -A INPUT -i eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
5- Разрешите исходящие соединения:
iptables -A OUTPUT -j ACCEPT
Примечание: эти настройки будут утеряны после перезагрузки. Прочитайте, как сохранить правила iptables.
Я думаю, что другие ответы упустили некоторые важные моменты. Вот другой способ, предполагая, что iptables в свежем состоянии, снова используя eth0 в качестве внутреннего интерфейса и eth1 в качестве внешнего:
-
Включите пересылку IP в ядре:
echo 1 > /proc/sys/net/ipv4/ip_forward # или sysctl -w net.ipv4.ip_forward=1
Чтобы сохранить это изменение после перезагрузки, добавьте или раскомментируйте
net.ipv4.ip_forward=1
в/etc/sysctl.conf
или в файле в/etc/sysctl.d
. -
Включите маскировку на eth1, чтобы переписывать адрес источника в исходящих пакетах. Если вы действительно хотите симметричный NAT, вам нужно добавить
--random
в конце:iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE --random
-
Настройте правила пересылки. По умолчанию iptables будет перенаправлять весь трафик без условий. Вероятно, вы хотите ограничить входящий трафик с интернета, но разрешить все исходящие:
# Разрешить трафик с внутреннего на внешний iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT # Разрешить возвращающий трафик с внешнего на внутренний iptables -A FORWARD -i eth1 -o eth0 -m conntrack --ctstate RELATED, ESTABLISHED -j ACCEPT # Отбрасывать весь другой трафик, который не должен быть перенаправлен iptables -A FORWARD -j DROP
Обратите внимание, что мы не трогали цепочки INPUT или OUTPUT в таблице фильтров; они не относятся к маршрутизации.
Чтобы сохранить эти изменения брандмауэра после перезагрузки:
iptables-save > /etc/sysconfig/iptables
systemctl enable --now iptables
Этот шаг будет варьироваться в зависимости от дистрибутива Linux.
Это простой скрипт, который может сделать свое дело, он включает в себя все, что нужно маршрутизатору, он хорошо протестирован на UBUNTU 16.04
#!/bin/bash
# Этот скрипт написан, чтобы сделать вашу Linux-машину маршрутизатором
# С его помощью вы можете настроить свою Linux-машину в качестве шлюза.
# Автор @ Mansur Ul Hasan
# Email @ [email protected]
# Определение интерфейсов для шлюза.
INTERNET=eth1
LOCAL=eth0
# ВАЖНО: активируйте пересылку IP в ядре!
# По умолчанию отключено!
echo "1" > /proc/sys/net/ipv4/ip_forward
# Загружаем различные модули. Обычно они уже загружены
# (особенно для новых ядер), в этом случае
# следующие команды не нужны.
# Загружаем модуль iptables:
modprobe ip_tables
# активируем отслеживание соединений
# (учитываются состояния соединений)
modprobe ip_conntrack
# Специальные функции для IRC:
modprobe ip_conntrack_irc
# Специальные функции для FTP:
modprobe ip_conntrack_ftp
# Удаление всех правил в INPUT, OUTPUT и FILTER
iptables --flush
# Сбрасываем все правила в таблице nat
iptables --table nat --flush
# Удаление всех существующих цепочек
iptables --delete-chain
# Удаление всех цепочек, которые не находятся в таблице фильтров и nat по умолчанию
iptables --table nat --delete-chain
# Разрешение установленных соединений с публичного интерфейса.
iptables -A INPUT -i $INTERNET -m state --state ESTABLISHED,RELATED -j ACCEPT
# Настройка пересылки IP и маскирования
iptables --table nat --append POSTROUTING --out-interface $INTERNET -j MASQUERADE
iptables --append FORWARD --in-interface $LOCAL -j ACCEPT
# Разрешение исходящих соединений
iptables -A OUTPUT -j ACCEPT
Для тех, кто хочет попробовать firewall-cmd
Предполагаем:
wan интерфейс — ens192
,
lan интерфейс — ens224
,
зона брандмауэра nm-shared
уже создана и установлена (как было в моем случае)
по умолчанию оба интерфейса находились в моей зоне public
, так что я просто переместил ens224
в nm-shared
firewall-cmd --zone=nm-shared --change-interface=ens224
и включил masquerade
на public
firewall-cmd --zone=public --add-masquerade
и на этом этапе это сработало.
Для постоянных изменений см. флаги --permanent
и --reload
больше информации docs.redhat.com и man firewall-cmd
Ответ или решение
Как настройки сервер Linux в качестве маршрутизатора с NAT
В данном руководстве мы подробно рассмотрим, как настроить сервер на базе Linux в качестве маршрутизатора с симметричным NAT (Network Address Translation). Это позволит вам захватывать пакеты и диагностировать сетевые проблемы, используя возможности системы Linux. Для примера мы будем рассматривать сервер на Fedora с ядром 2.6.xx.
Шаг 1: Включение IP-прокидывания
Первым делом необходимо активировать прокидывание пакетов. Это можно сделать с помощью следующей команды:
echo 1 > /proc/sys/net/ipv4/ip_forward
Чтобы сохранить это изменение после перезагрузки, необходимо добавить или раскомментировать строку net.ipv4.ip_forward=1
в файле /etc/sysctl.conf
или в отдельном файле внутри директории /etc/sysctl.d
.
Также для применения изменения можно использовать:
sysctl -w net.ipv4.ip_forward=1
Шаг 2: Настройка NAT
Используйте iptables для настройки маскировки исходящего трафика через ваш внешний интерфейс (например, eth1
). Это можно сделать с помощью следующей команды:
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE --random
--random
опция используется для достижения симметричного NAT, который изменяет исходные адреса пакетов случайным образом для каждого подключения.
Шаг 3: Настройка правил форвардинга
Теперь необходимо настроить правила защиты трафика, чтобы разрешить трафик из внутренней сети в внешнюю и разрешить ответные соединения:
# Разрешить трафик из внутренней сети во внешнюю
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
# Разрешить ответные пакеты во внутренней сети
iptables -A FORWARD -i eth1 -o eth0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# Отклонить весь остальной трафик, который не должен быть перенаправлен
iptables -A FORWARD -j DROP
Эти правила обеспечат корректный обмен данными в вашей сети.
Шаг 4: Сохранение правил iptables
Правила, которые вы создали, не сохранятся после перезагрузки системы. Чтобы сделать их постоянными, выполните следующие команды:
iptables-save > /etc/sysconfig/iptables
systemctl enable --now iptables
Это обеспечит автоматическую загрузку ваших правил при старте системы.
Шаг 5: Дополнительно — использование firewalld
Если вы используете firewalld
, настройка может быть выполнена следующим образом:
- Переместите ваш локальный интерфейс (например,
ens224
) в созданную зону (например,nm-shared
):
firewall-cmd --zone=nm-shared --change-interface=ens224
- Включите маскировку на внешнем интерфейсе (например,
ens192
):
firewall-cmd --zone=public --add-masquerade
Для постоянного внедрения этих изменений используйте флаги --permanent
и --reload
.
Заключение
Теперь ваш сервер Linux настроен как маршрутизатор с симметричным NAT, что позволит вам детально отслеживать и захватывать пакеты. Это особенно полезно для отладки и анализа сетевых проблем. Следуя приведённым шагам, вы сможете без труда организовать надежную и высокоэффективную сетевую инфраструктуру.