Привет Хабр! Сегодня я расскажу, как без особых затрат и дополнительных физических интерфейсов пробросить локальную сеть провайдера в свою домашнюю сеть. Идея возникла после появления в сети нашего провайдера полноценного 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.7
iface eth1.7 inet manual
Итак, Vlan с номером 7 у нас создан на интерфейсе eth1 без ip-адреса, ибо он нам не нужен. Теперь надо направить локальный трафик с eht0 в Vlan, для этого меняем в /etc/network/interfaces настройки eth0 на мост:
Убираем IP с eth0:
auto eth0
iface eth0 inet manual
Создаем мост:
auto br0
iface br0 inet dhcp
bridge_ports eth0 eth1.7
В принципе, тут бы можно и остановиться, но после подъема моста отваливается PPPoE. Решается это так: для начала в настройках нашего PPPoE в /etc/network/interfaces правим автоподнимаемый интерфейс с eth0 на br0:
auto dsl-provider
iface 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.)
Всю историю этой задачи в процессе решения вы можете так же посмотреть тут.