У меня есть несколько вопросов о SNAT с iptables. Предположим, что есть один маршрутизатор, который играет роль DHCP-сервера для назначения частных IP-адресов в моей локальной сети и NAT для хостов в моей локальной сети, которые могут получить доступ к публичному интернету.
Маршрутизатор имеет два интерфейса, один "eth0" с динамическим публичным IP и другой "eth1" с частным IP 192.168.0.1, а подсеть - 192.168.0.0/24. Предположим, что на этом маршрутизаторе включена пересылка пакетов ipv4. Я знаю, что мне нужно установить одно правило в таблице NAT для маскировки исходного IP пакета в публичный Интернет с хостов в моей локальной сети. Это правило может выглядеть так, как показано ниже.
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
Я понимаю, зачем мне это правило, поскольку пакету из моей локальной сети нужен публичный IP-адрес для маршрутизации в Интернете.
Но я не понимаю, почему мне не нужно устанавливать еще одно правило в PREROUTING
цепочке для ответных пакетов, чтобы изменять их IP-адреса назначения.
Является ли изменение адреса назначения этих ответных пакетов поведением по умолчанию правила MASQUERADE, которое я только что установил?
И еще один вопрос: как iptable узнает, какие пакеты следует модифицировать?
Спасибо.
решение1
iptables NAT имеет состояние. Использование таблицы 'nat' автоматически загрузитconntrackсистема, которая хранит список активных соединений и распознает, какой пакет принадлежит какому соединению. Система conntrack регистрирует внутренние хуки, которые работают отдельно от правил iptables, и автоматически преобразует пакеты, которые она распознает.
(Таблицу состояний conntrack можно просмотреть с помощью conntrack -L
или через /proc/self/net/nf_conntrack.)
При использовании этой системы правила в таблице «nat» фактически соответствуют толькоисходныйпакет, принадлежащий каждому соединению, а не каждому отдельному пакету. После сопоставления начального пакета соответствующая запись conntrack помечается как требующая NAT (или нет), и дальнейшие пакеты автоматически преобразуются, даже не проходя через таблицу 'nat'.