Итак, я настраивал 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-туннеля, поступать в остальную часть частной сети и обратно.