Авторизация

ВЫХОД В ИНТЕРНЕТ ЧЕРЕЗ ДОМАШНИЙ МАРШРУТИЗАТОР

Рейтинг:  5 / 5

Звезда активнаЗвезда активнаЗвезда активнаЗвезда активнаЗвезда активна
 

 

 

Шаг 3.2. Создание разрешения на передачу трафика из VPN интерфейса в сеть провайдера

Это непростой пункт, но, с другой стороны, может быть ничего и не потребуется делать.

Тем не менее, сначала нужно кое-что пояснить.

Вероятнее всего, в вашем домашнем маршрутизаторе функционирует какая-то версия *nix систем. Наиболее часто встречается busybox – максимально обрезанный линукс, заточенный под задачи маршрутизации.  Обычно, в таких системах функцию межсетевого экрана выполняет программа iptables. Это мощное и гибкое средство, однако, для новичка это сущий ужас. Увы, нам без него никак не обойтись, но я постараюсь изложить очень немного и максимально просто.

 

Немного про iptables

 

Когда ваше устройство получает сетевой пакет на любом из интерфейсов, то в дело вступает iptables. Очень приблизительно схема его работы приведена здесь.

 

iptables

 

Входящий пакет обрабатывается правилами PREROUTING.

Затем, если пакет должен быть смаршрутизирован, то его отдают в набор правил под названием FORWARD. Затем пакет обрабатывается правилами POSTROUTING и выходит в сетевой интерфейс, уже обработанным так, как нам надо.

Если пакет должен быть обработан какой-либо программой самого устройства (какая-то локальная служба или сервис), то пакет поступает в набор правил INPUT, затем поступает приложению, а на выходе обрабатывается правилами OUTPUT.  

В реальности все немного сложнее, да и наборов правил может быть больше, но для наших целей этого знания достаточно.

Стоит отметить, что пакет, подвергаемый обработке NAT на приеме (например, когда вы «выставляете наружу порты устройства»), называется Destination NAT (Destination IP address translation), эта функция транслирует адрес и порт получателя (адрес провайдера на внешнем интерфейсе вашего маршрутизатора) в ваш внутренний адрес и порт. Это осуществляется в наборе правил PREROUTING.

А в трафике, выходящем к провайдеру, обычно транслируется адрес источника – он заменяется на адрес провайдерского интерфейса. Эта процедура называется SNAT (Source IP address translation) и выполняется она в наборе правил POSTROUTING.

 

 

Теперь давайте посмотрим, как все это устроено в вашем маршрутизаторе.

Для этого подключимся к Dlink по telnet и выполнить команду:

 iptables -n -L -v --line-numbers 

В выводе вы увидите много различных строк. В частности, там будут фигурировать ранее перечисленные нами группы правил INPUT, PREROUTING, FORWARD, POSTROUTING и куча других. На данный момент времени нас будет интересовать группа правил FORWARD. Давайте выведем только их командой.

 iptables -L FORWARD -v --line-numbers 

В результате мы увидим следующую картину:

vpnki dlink iptables forward 1

 

Здесь важны два момента.

Первый момент, это режим работы (политика) группы правил, именуемый policy. Этот режим может быть ACCEPT, а может быть DROP. В нашем случае, во второй строке картинки мы видим policy ACCEPT, что означает, что трафик, который не попал ни в одно из описанных в группе правил, будет пропущен. Если бы policy был бы DROP, то трафик, не описанный правилами ниже, будет сброшен. Ну и стоит отдельно упомянуть, что правила применяются к пакету по порядку, начиная с самого верхнего правила.

В качестве примера, давайте взглянем на самое первое правило с номером 1.

В нем сказано:

  • сбрасывать трафик (DROP),
  • протокола tcp,
  • поступившего с входного интерфейса (in) - br0,
  • следующего в любой выходной интерфейс (out) – any,
  • c любым IP адресом источника (source) – anywhere,
  • с IP адресом назначения (destination) – 192.0.2.1,
  • если порт получателя равен 80 (tcp dpt:www)

Небольшой комментарий. Как мы помним, интерфейс br0 это общий интерфейс домашней сети (bridge0), куда входит ваше проводное подключение и ваш домашний WiFi. То есть фактически, это правило сбросит трафик если вы, находясь в домашней сети, наберете в строке браузера http://192.0.2.1

Ну и обратите внимание на счетчики трафика. В первом правиле счетчики пакетов равны 0, что означает, что межсетевой экран не зафиксировал трафик, который бы попадал под это правило.

Надеюсь, что вам стало понятнее.

Второй момент касается правила №3. Это правило, которое мешает нашему DLink быть настоящим маршрутизатором. В нем счетчик пакетов равен 76 и это означает, что это правило уже что-то не пропустило через себя. Вот что в нем написано:

  • сбрасывать трафик (DROP),
  • любого протокола (any),
  • поступившего с входного интерфейса (in) – eth1,
  • следующего в любой выходной интерфейс, кроме br+ (out) – !br+, (плюс означает любой br...)
  • c любым IP адресом источника (source) – anywhere,
  • с IP адресом назначения (destination) – anywhere

То есть это правило говорит о том, что трафик, идущий из сети провайдера (eth1) попадет в домашнюю сеть (br0), но НЕ попадет в интерфейс ppp0. Вот какая засада. Это дело нужно исправить.

Нужно удалить это правило. Если его удалить, то вроде бы никакие правила ниже не должны влиять на прохождение трафика между интерфейсами ppp0, br0 и eth1. А как мы помним, если никакие правила трафику не мешают, то согласно политике ACCEPT для всей группы, трафик будет передан.

Удаляем это чудесное правило №3 командой

 iptables -D FORWARD 3 

И вновь посмотрим на результат:

 iptables -L FORWARD -v --line-numbers 

 vpnki dlink iptables forward 4

 

Что же, теперь старое правило 3 исчезло. Хочется верить, что все заработает, но остался последний пункт нашей настройки.