Понимание iptables в устройстве маршрутизации

Понимание iptables в устройстве маршрутизации

Итак, я настраивал Raspberry Pi для работы в качестве VPN-маршрутизатора с помощью Stunnel, OpenVPN и множества статей в Интернете (в основном изДжейден Чуа) и могу успешно создать его, но я не до конца понимаю часть iptables (описанную ниже), хотя я прочитал некоторую онлайн-справку по этой теме.

iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE
iptables -A FORWARD -i wlan0 -j ACCEPT
iptables -A FORWARD -i tun0 -o wlan1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i wlan1 -o tun0 -j ACCEPT

Может кто-нибудь объяснить мне каждую строчку? Я знаю, что это может быть просто, но честно говоря, я не могу понять, почему это работает =P

Заранее большое спасибо =)

решение1

Прежде всего, нам нужно определить IP-пересылку. Я не буду объяснять очень глубоко (я и не знаю), но в принципе, в этом контексте, вам нужно знать, что это означает поток пакетов от одного хоста к другому через этот хост.

Я должен отметить, что ни одно из -A FORWARD ... -j ACCEPTправил/команд не является необходимым, если у вас нет -P FORWARD DROPили подобного (т.е. не отбрасывается любой пакет, который должен быть переслан). Правила не вызывают пересылку, а только делают исключение, когда по умолчанию не "ACCEPT". (Вы "включаете" пересылку с помощью sysctl.)

Теперь давайте взглянем на правила:

iptables -A FORWARD -i wlan0 -j ACCEPT

Это означает, что необходимо разрешить пересылку пакетов, поступающих с wlan0 (в другую сеть через любой интерфейс на этом хосте).

iptables -A FORWARD -i wlan1 -o tun0 -j ACCEPT

Это означает, что необходимо разрешить пересылку пакетов, поступающих из wlan1, на tun0. (Обратите внимание, что это не требуется для того, чтобы пакеты достигли адреса(ов) самого tun0, поскольку это не считается «пересылкой».)

iptables -A FORWARD -i tun0 -o wlan1 -m state --state RELATED,ESTABLISHED

Это означает разрешить пересылку пакетов, поступающих из tun0, в wlan1, только если есть связанное или установленное соединение, проверяя с помощью расширения/модуля state(это устарело с conntrack, который вместо этого использует коммутатор --ctstate). Вместе с предыдущим правилом, по сути, они означают разрешить пересылку между tun0 и wlan1, пока соединение не инициировано пакетом из tun0.

iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

Это в основном означает, что пакеты, которые выходят из tun0, будут иметь свой исходный адрес, измененный на tun0. Если этого не сделать, следующему маршрутизатору понадобится обратный маршрут для любого ответа, чтобы достичь исходного адреса источника. (т.е. чтобы достичь исходного адреса источника, этот хост должен быть шлюзом). Это также известно как NAT (перегрузка) / PAT. Думайте об этом как о том, чтобы заставить tun0 работать как порт/интерфейс WAN типичного маршрутизатора потребительского уровня.

решение2

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

iptables -t nat -A POSTROUTING -o tun0 -j MASQUERADE

Это правило в основном берет пакет, применяетсяНАТ, но после того, как принято решение о том, как направить этот пакет. Вот почему он применяется к POSTROUTING. Затем он отправляет пакет обратно в туннель, называемый tun0. Это ваше VPN-подключение. Он также применяет маскарад, поскольку правило не знает IP-адрес устройства. Без него вам пришлось бы использовать эту команду для каждого подключающегося устройства. Так что вы могли бы рассматривать это как своего рода подстановочную карту.

iptables -A FORWARD -i wlan0 -j ACCEPT 
iptables -A FORWARD -i wlan1 -o tun0 -j ACCEPT

Эта строка говорит о принятии всего трафика, пересылаемого на wlan0интерфейс. Я предполагаю, wlan0что используется в качестве основного интернет-подключения в этом руководстве, поэтому это основной маршрут между маршрутизатором и VPN-туннелем. Это заставляет Pi принимать пакеты на этом интерфейсе и даетдоступ к внутренней сети. Вторая строка здесь, по сути, просто обратный путь для пакета. Из пи, обратно в туннель.

iptables -A FORWARD -i tun0 -o wlan1 -m state --state RELATED,ESTABLISHED -j ACCEPT

Эта строка разрешает трафик, исходящий из туннеля, tun0идущий на интерфейс wlan0, но только если соединение было установлено.учредилранее.

Вкратце, эти правила позволяют пакетам, поступающим из VPN-туннеля, поступать в остальную часть частной сети и обратно.

Связанный контент