. Как мы организовали мини-провайдер в поселке
Как мы организовали мини-провайдер в поселке

Как мы организовали мини-провайдер в поселке

Переехав по работе на Крайний Север столкнулся с проблемой отсутствия нормального интернета (сотовые операторы не в счет, ибо все равно не устраивает). Потыкавшись пару недель с поиском WiFi сетей по соседству, нашел доброго человека, который решил организовать какое-то подобие провайдера с раздачей интернета всем желающим по WiFi. Но у этого человека не было знаний и опыта по настройке сетей и, как следствие, сеть была построена не очень хорошо.

Переговорив, мы решили объединиться. У меня худо-бедно есть опыт по настройке серверов под *nix и построения сетей, у него оборудование и 2-3 канала в интернет через соседей и их ADSL-модемы. В первую очередь было решено поднять сервер шлюз в сеть. В качестве ОС был установлен Debian. Для раздачи интернета решено использовать связку iptables + Squid (в качестве кеширующего прокси), так же были установлены и настроены BIND (кеширующий DNS) и dhcpd для раздачи Ip адресов.

На шлюзе 2 сетевые карты: одна «смотрит» на локальную сеть, вторая на 4 adsl модема. Так как у меня опыта в построении сетей провайдеров можно сказать нет, было решено пускать пользователей в разные сети через разные модемы (прошу за данное решение сильно не пинать).

Так же на сервере был установлен webmin.

Собственно, рассказывать про установку iptables, squid, dhs и dhcp смысла нет. Nак как в сети есть куча мануалов, расскажу про небольшую автоматизацию, которую я реализовал для облегчения управления пользователями для человека, который с *nix ни разу не сталкивался.

Схема добавления пользователей следующая:

1. Пользователь прописывается на dhcp (адреса выдаются только зарегистрированным пользователям); 2. Затем пользователь прописывается на squid; 3. Затем запускается скрипт, который парсит конфиг сквида и создает правила для файрвола.

Собственно, сами скрипты (скрипты корявые писались на коленке, дабы работало) (скрипты лежат в директории /etc/nat).

Собственно сам парсинг конфига сквида:

Как видно, он обрабатывает конфиг и выдергивает все ip-адреса по определенной маске и по результату запускает другой скрипт:

#!/bin/bash cat /dev/null > /etc/nat/natread echo «Сброс правил iptables» sleep 1 iptables -F iptables -X iptables -t nat -F iptables -t nat -X iptables -t mangle -F iptables -t mangle -X iptables -P INPUT ACCEPT iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT

echo "#!/bin/bash" >> /etc/nat/natread echo «echo 1 > /proc/sys/net/ipv4/ip_forward» >> /etc/nat/natread echo «iptables -A INPUT -i lo -j ACCEPT» >> /etc/nat/natread echo «iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT» >> /etc/nat/natread mask=«172» badlist=$(cat /etc/nat/bad) arrbad=$(echo $badlist) for x in $arrbad do if [[ $x == $mask* ]]; then echo «iptables -I INPUT -i eth0 -s» $x "-j DROP" >> /etc/nat/natread fi done ip=$(cat /etc/nat/ip) arr=$(echo $ip | tr "/" "\n") for x in $arr do if [[ $x == $mask* ]]; then echo «iptables -t nat -A POSTROUTING -o eth1 -s» $x "-j MASQUERADE" >> /etc/nat/natread fi done echo «iptables -A FORWARD -i eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT» >> /etc/nat/natread echo «iptables -A FORWARD -i eth1 -o eth0 -j REJECT» >> /etc/nat/natread echo «iptables -t nat -A PREROUTING -i eth0! -d 172.16.0.0/24 -p tcp -m multiport --dport 80,8080 -j DNAT --to 172.16.0.1:3128» >> /etc/nat/natread echo «echo \»Выполняется перезагрузка правил файрвола \"" >> /etc/nat/natread echo «sleep 1s» >> /etc/nat/natread echo «echo \».\"" >> /etc/nat/natread echo «sleep 1s» >> /etc/nat/natread echo «echo \».\"" >> /etc/nat/natread echo «sleep 1s» >> /etc/nat/natread echo «echo \».\"" >> /etc/nat/natread echo «sleep 1s» >> /etc/nat/natread echo «echo \»Перезагрузка правил файрвола выполнена успешно!\"" >> /etc/nat/natread rm /etc/nat/ip /etc/nat/natread

Данный скрипт сбрасывает правила iptables и генерирует скрипт, который по результату и добавляет правила файрвола.

Данный скрипт приводится для примера:

Как видно, тут так же реализована возможность добавления пользователей, которые забыли заплатить за интернет путем добавления адресов этих пользователей в файл bad.

Собственно, с раздачей интернета разобрались. Но возникла проблема: из-за частых скачков в электрической сети ADSL-модемы могли зависнуть наглухо, из-за этого пользователи не могли зайти на часть сайтов. В качестве костыля был написан скрипт, который проверяет доступность модемов и на основании теста из шаблонов генерировал таблицу маршрутов:

По результатам работы скрипта создаются 2 файла: network с таблицей маршрутов и delnet, который, собственно, при запуске удаляет старые маршруты:

#!/bin/bash route add -net 0.0.0.0/4 gw 172.16.1.201 route add -net 16.0.0.0/4 gw 172.16.1.202 route add -net 32.0.0.0/4 gw 172.16.1.203 route add -net 48.0.0.0/4 gw 172.16.1.201 route add -net 64.0.0.0/4 gw 172.16.1.202 route add -net 80.0.0.0/4 gw 172.16.1.203 route add -net 96.0.0.0/4 gw 172.16.1.201 route add -net 112.0.0.0/4 gw 172.16.1.202 route add -net 128.0.0.0/4 gw 172.16.1.203 route add -net 144.0.0.0/4 gw 172.16.1.201 route add -net 160.0.0.0/4 gw 172.16.1.202 route add -net 176.0.0.0/4 gw 172.16.1.203 route add -net 192.0.0.0/4 gw 172.16.1.201 route add -net 208.0.0.0/4 gw 172.16.1.202 route add -net 224.0.0.0/4 gw 172.16.1.203 route add -net 240.0.0.0/4 gw 172.16.1.201

rm -f /etc/nat/delnet touch /etc/nat/delnet echo "#!/bin/bash" >> /etc/nat/delnet echo «route del -net 0.0.0.0/4 gw 172.16.1.201» >> /etc/nat/delnet echo «route del -net 16.0.0.0/4 gw 172.16.1.202» >> /etc/nat/delnet echo «route del -net 32.0.0.0/4 gw 172.16.1.203» >> /etc/nat/delnet echo «route del -net 48.0.0.0/4 gw 172.16.1.201» >> /etc/nat/delnet echo «route del -net 64.0.0.0/4 gw 172.16.1.202» >> /etc/nat/delnet echo «route del -net 80.0.0.0/4 gw 172.16.1.203» >> /etc/nat/delnet echo «route del -net 96.0.0.0/4 gw 172.16.1.201» >> /etc/nat/delnet echo «route del -net 112.0.0.0/4 gw 172.16.1.202» >> /etc/nat/delnet echo «route del -net 128.0.0.0/4 gw 172.16.1.203» >> /etc/nat/delnet echo «route del -net 144.0.0.0/4 gw 172.16.1.201» >> /etc/nat/delnet echo «route del -net 160.0.0.0/4 gw 172.16.1.202» >> /etc/nat/delnet echo «route del -net 176.0.0.0/4 gw 172.16.1.203» >> /etc/nat/delnet echo «route del -net 192.0.0.0/4 gw 172.16.1.201» >> /etc/nat/delnet echo «route del -net 208.0.0.0/4 gw 172.16.1.202» >> /etc/nat/delnet echo «route del -net 224.0.0.0/4 gw 172.16.1.203» >> /etc/nat/delnet echo «route del -net 240.0.0.0/4 gw 172.16.1.201» >> /etc/nat/delnet chmod +x /etc/nat/delnet

#!/bin/bash route add -net 0.0.0.0/4 gw 172.16.1.203 route add -net 16.0.0.0/4 gw 172.16.1.203 route add -net 32.0.0.0/4 gw 172.16.1.203 route add -net 48.0.0.0/4 gw 172.16.1.203 route add -net 64.0.0.0/4 gw 172.16.1.203 route add -net 80.0.0.0/4 gw 172.16.1.203 route add -net 96.0.0.0/4 gw 172.16.1.203 route add -net 112.0.0.0/4 gw 172.16.1.203 route add -net 128.0.0.0/4 gw 172.16.1.203 route add -net 144.0.0.0/4 gw 172.16.1.203 route add -net 160.0.0.0/4 gw 172.16.1.203 route add -net 176.0.0.0/4 gw 172.16.1.203 route add -net 192.0.0.0/4 gw 172.16.1.203 route add -net 208.0.0.0/4 gw 172.16.1.203 route add -net 224.0.0.0/4 gw 172.16.1.203 route add -net 240.0.0.0/4 gw 172.16.1.203

rm -f /etc/nat/delnet touch /etc/nat/delnet echo "#!/bin/bash" >> /etc/nat/delnet echo «route del -net 0.0.0.0/4 gw 172.16.1.203» >> /etc/nat/delnet echo «route del -net 16.0.0.0/4 gw 172.16.1.203» >> /etc/nat/delnet echo «route del -net 32.0.0.0/4 gw 172.16.1.203» >> /etc/nat/delnet echo «route del -net 48.0.0.0/4 gw 172.16.1.203» >> /etc/nat/delnet echo «route del -net 64.0.0.0/4 gw 172.16.1.203» >> /etc/nat/delnet echo «route del -net 80.0.0.0/4 gw 172.16.1.203» >> /etc/nat/delnet echo «route del -net 96.0.0.0/4 gw 172.16.1.203» >> /etc/nat/delnet echo «route del -net 112.0.0.0/4 gw 172.16.1.203» >> /etc/nat/delnet echo «route del -net 128.0.0.0/4 gw 172.16.1.203» >> /etc/nat/delnet echo «route del -net 144.0.0.0/4 gw 172.16.1.203» >> /etc/nat/delnet echo «route del -net 160.0.0.0/4 gw 172.16.1.203» >> /etc/nat/delnet echo «route del -net 176.0.0.0/4 gw 172.16.1.203» >> /etc/nat/delnet echo «route del -net 192.0.0.0/4 gw 172.16.1.203» >> /etc/nat/delnet echo «route del -net 208.0.0.0/4 gw 172.16.1.203» >> /etc/nat/delnet echo «route del -net 224.0.0.0/4 gw 172.16.1.203» >> /etc/nat/delnet echo «route del -net 240.0.0.0/4 gw 172.16.1.203» >> /etc/nat/delnet chmod +x /etc/nat/delnet

📎📎📎📎📎📎📎📎📎📎