Привет Хабр! Сегодня я расскажу, как без особых затрат и дополнительных физических интерфейсов пробросить локальную сеть провайдера в свою домашнюю сеть. Идея возникла после появления в сети нашего провайдера полноценного IPTV. Можно, конечно, было настроить iptables на форвардинг мультикаста, но это вышло бы накладно с точки зрения ресурсов сервера, поэтому я задался задачей сделать это при помощи 802.1q VLAN.
Сеть нашего провайдера построена так: локальная сеть (eth0) DHCP 10.0.0.0/8 (грубо говоря, имеется разделение по подсетям), интернет PPPoE (ppp0). Поскольку у меня сеть провайдера приходит на скорости 1 Гбит, а гигабитных портов на свиче всего 2 (DES3526), пришлось завести приходящий провод напрямую в сервер, в противном случае на мой основной компьютер гигабит не приходил бы. Или он не приходил бы на сервер, что тоже не есть гуд. Так как же сделать так, чтобы локальная сеть провайдера приходила на нужный порт и не обрабатывалась IPtables? Просто! Для начала установим нужные пакеты:
Затем подгружаем модуль ядра 802.1q:
Делаем автозагрузку модуля:
Далее нам надо создать vlan на нашем домашнем интерфейсе (в моем случае это eth1), для этого добавляем в /etc/network/interfaces следующее:
Итак, Vlan с номером 7 у нас создан на интерфейсе eth1 без ip-адреса, ибо он нам не нужен. Теперь надо направить локальный трафик с eht0 в Vlan, для этого меняем в /etc/network/interfaces настройки eth0 на мост:
Убираем IP с eth0:
Создаем мост:
В принципе, тут бы можно и остановиться, но после подъема моста отваливается PPPoE. Решается это так: для начала в настройках нашего PPPoE в /etc/network/interfaces правим автоподнимаемый интерфейс с eth0 на br0:
Затем надо ткнуть демона мордой в интерфейс, где искать PPPoE, для этого правим /etc/ppp/peers/dsl-provider, где меняем строку:
plugin rp-pppoe.so eth0 на
plugin rp-pppoe.so br0
Ну вот мы и подошли к проверке работоспособности нашего моста. Начинаем с поднятия интерфейсов:
Разрываем связь с внешним миром:
Поднимаем мост:
Поднимаем PPPoE:
Если все настройки сделаны правильно, то все заработает сразу. Осталось только направить Vlan на необходимый порт нашего свича или роутера (если роутер поддерживает 802.1q Vlan.)
Всю историю этой задачи в процессе решения вы можете так же посмотреть тут.
Сеть нашего провайдера построена так: локальная сеть (eth0) DHCP 10.0.0.0/8 (грубо говоря, имеется разделение по подсетям), интернет PPPoE (ppp0). Поскольку у меня сеть провайдера приходит на скорости 1 Гбит, а гигабитных портов на свиче всего 2 (DES3526), пришлось завести приходящий провод напрямую в сервер, в противном случае на мой основной компьютер гигабит не приходил бы. Или он не приходил бы на сервер, что тоже не есть гуд. Так как же сделать так, чтобы локальная сеть провайдера приходила на нужный порт и не обрабатывалась IPtables? Просто! Для начала установим нужные пакеты:
sudo apt-get install vlan bridge-utilsЗатем подгружаем модуль ядра 802.1q:
sudo modprobe 8021qДелаем автозагрузку модуля:
sudo echo 8021q > /etc/modulesДалее нам надо создать vlan на нашем домашнем интерфейсе (в моем случае это eth1), для этого добавляем в /etc/network/interfaces следующее:
auto eth1.7iface eth1.7 inet manual
Итак, Vlan с номером 7 у нас создан на интерфейсе eth1 без ip-адреса, ибо он нам не нужен. Теперь надо направить локальный трафик с eht0 в Vlan, для этого меняем в /etc/network/interfaces настройки eth0 на мост:
Убираем IP с eth0:
auto eth0iface eth0 inet manualСоздаем мост:
auto br0iface br0 inet dhcpbridge_ports eth0 eth1.7В принципе, тут бы можно и остановиться, но после подъема моста отваливается PPPoE. Решается это так: для начала в настройках нашего PPPoE в /etc/network/interfaces правим автоподнимаемый интерфейс с eth0 на br0:
auto dsl-provideriface dsl-provider inet ppp pre-up /sbin/ifconfig br0 up # line maintained by pppoeconf provider dsl-provider
Затем надо ткнуть демона мордой в интерфейс, где искать PPPoE, для этого правим /etc/ppp/peers/dsl-provider, где меняем строку:
plugin rp-pppoe.so eth0 на
plugin rp-pppoe.so br0
Ну вот мы и подошли к проверке работоспособности нашего моста. Начинаем с поднятия интерфейсов:
sudo ifup eth1.7Разрываем связь с внешним миром:
sudo poff dsl-providerПоднимаем мост:
sudo ifup br0Поднимаем PPPoE:
sudo pon dsl-providerЕсли все настройки сделаны правильно, то все заработает сразу. Осталось только направить Vlan на необходимый порт нашего свича или роутера (если роутер поддерживает 802.1q Vlan.)
Всю историю этой задачи в процессе решения вы можете так же посмотреть тут.