Skip to content

Приручаем интерфейс

Как не хорошо получается, целый месяц не писал. Ну будем наверстывать упущенное.

Значит имеется сервер, предназначенный для раздачи интернета на несколько пользователей. К интернету сервер коннектится через PPPoE, пользователи подключаются через VPN. Довольно часто имеют место разрывы соединения с провайдером (ессно по его вине), так вот если во время отсутствия коннекта с провайдером, к серваку подключается юзер в надежде полазить в интернете…он этого самого интернета не получит даже когда коннект с провайдером восстановится. А все почему? А потому что по умолчанию коннект с провайдером идет через интерфейс ppp0. Так вот коннект пропал, интерфейс тоже, и тут подключается юзер. На какой интерфейс его подключит сервак? Правильно, на ppp0. Ладно, юзер подключился, сидит курит бамбук, инета нет. Через неопределенное время серверу все-таки удается соединиться с провайдером, но поскольку интерфейс ppp0 занят, он цепляется на ближайший свободный, тоесть на ppp1. И интернета…опять нет! Все загвоздка была в файле /etc/rc.d/rc.firewall - так в моем SlackWare на сервере называется скрипт в котором прописаны все правила iptables. До недавнего времени в конце этого файла была замечательная строчка, осуществлявшая маскарадинг, понятно для каких целей.

Выглядела она так:

iptables -A POSTROUTING -t nat -o ppp0 –protocol all -j MASQUERADE

Понятно что маскарадились только пакеты с интерфейса ppp0. И если сервер подключался к провайдеру через другой интерфейс, то никакого маскарадинга не было и интернета тоже.

Попытки приучить сервер выдавать интерфейс ppp0 только для соединения с провайдером успеха не имели. Ну чтож, если гора не идет к Магомету… Разрешим серверу соединяться с провайдером через любой интерфейс, но при условии, что он будет нам каждую минуту сообщать на каком интерфейсе он в данный момент подключен. Для этого вместо приведенной выше строчки пишем две другие:

PPP=`ip route | grep ‘via 10.254.254.254’ | grep -o ‘ppp[0-99]’`;

iptables -A POSTROUTING -t nat -o $PPP –protocol all -j MASQUERADE

Где 10.254.254.254 vpn-шлюз провайдера.

Вот и все. Теперь добавляем этот самый файл в крон выполняться каждую минуту, и имеем много счастья.

P.S Спустя два года после этого поста, я нашел более правильное решение проблемы. Читать.

Связанные посты

  1. Случилось мне как-то стать админом в домашней сетке
  2. Контесты Дипломы
  3. Hello New 2009!!!
  4. DC++
  5. Зима...
  6. Segmentation fault...xlog
  7. GlowBugs