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

Переговорив, мы решили объединиться. У меня худо-бедно есть опыт по настройке серверов под *nix и построения сетей, у него оборудование и 2-3 канала в интернет через соседей и их ADSL-модемы.

В первую очередь было решено поднять сервер шлюз в сеть. В качестве ОС был установлен Debian. Для раздачи интернета решено использовать связку iptables + Squid (в качестве кеширующего прокси), так же были установлены и настроены BIND (кеширующий DNS) и dhcpd для раздачи Ip адресов.

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

маршруты
route add -net 0.0.0.0/4 gw 172.16.1.200
route add -net 16.0.0.0/4 gw 172.16.1.201
route add -net 32.0.0.0/4 gw 172.16.1.202
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.200
route add -net 80.0.0.0/4 gw 172.16.1.201
route add -net 96.0.0.0/4 gw 172.16.1.202
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.200
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.200
route add -net 208.0.0.0/4 gw 172.16.1.201
route add -net 224.0.0.0/4 gw 172.16.1.202
route add -net 240.0.0.0/4 gw 172.16.1.203

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

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

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

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

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

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

proxy
#!/bin/bash
touch /etc/nat/ip
mask='172'
I=$(cat /etc/squid3/squid.conf | grep localnet | grep 172.16)
arr=$(echo $I | tr " " "\n")
arr2=$(echo $arr | tr "/" "\n")
for x in $arr
do
declare -a arrip
if [[ $x == $mask* ]]; then
arrip[0]=$x
echo $arrip[0] >> /etc/nat/ip
fi
done
### EOF ##############################
/etc/nat/ipread

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

etc/nat/ipread
#!/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 и генерирует скрипт, который по результату и добавляет правила файрвола.

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

/etc/nat/natread
#!/bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A INPUT -i lo -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
iptables -I INPUT -i eth0 -s 172.16/0/81 -j DROP
iptables -I INPUT -i eth0 -s 172.16.0.82 -j DROP
iptables -I INPUT -i eth0 -s 172.16.0.87 -j DROP
iptables -I INPUT -i eth0 -s 172.16.0.27 -j DROP
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.1 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.10 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.100 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.101 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.102 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.103 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.104 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.105 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.106 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.107 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.108 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.109 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.11 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.110 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.111 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.112 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.113 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.114 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.115 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.116 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.117 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.118 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.119 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.12 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.121 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.123 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.124 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.125 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.13 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.14 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.15 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.16 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.17 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.18 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.19 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.20 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.21 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.22 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.23 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.24 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.25 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.26 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.27 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.28 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.29 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.30 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.31 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.32 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.33 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.34 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.35 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.36 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.37 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.38 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.39 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.40 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.41 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.42 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.43 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.44 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.45 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.46 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.47 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.48 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.49 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.50 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.51 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.52 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.53 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.54 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.55 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.56 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.57 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.58 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.59 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.60 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.61 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.62 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.63 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.64 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.65 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.66 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.67 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.68 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.69 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.70 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.71 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.72 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.73 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.74 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.75 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.76 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.77 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.78 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.79 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.80 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.81 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.82 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.83 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.84 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.85 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.86 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.87 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.88 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.89 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.90 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.91 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.92 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.93 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.94 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.95 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.96 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.97 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.98 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.99 -j MASQUERADE
iptables -t nat -A POSTROUTING -o eth1 -s 172.16.0.120 -j MASQUERADE
iptables -A FORWARD -i eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -j REJECT
echo «Выполняется перезагрузка правил файрвола „
sleep 1s
echo “.»
sleep 1s
echo "."
sleep 1s
echo "."
sleep 1s
echo «Перезагрузка правил файрвола выполнена успешно!»

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

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

ping-test
#!/bin/bash
host1=«172.16.1.200»
host2=«172.16.1.201»
host3=«172.16.1.202»
host4=«172.16.1.203»
if ping -q -c 1 $host1 &> /dev/null;
then
x=«1»
else
x=«0»
fi
if ping -q -c 1 $host2 &> /dev/null;
then
y=«1»
else
y=«0»
fi
if ping -q -c 1 $host3 &> /dev/null;
then
z=«1»
else
z=«0»
fi
if ping -q -c 1 $host4 &> /dev/null;
then
i=«1»
else
i=«0»
fi
if [ $x == 1 ] && [ $y == 1 ] && [ $z == 1 ] && [ $i == 1 ];
then
rm -f /etc/nat/network
cp /etc/nat/network-ok /etc/nat/network
else
if [ $x == 0 ] && [ $y == 1 ] && [ $z == 1 ] && [ $i == 1 ];
then
rm -f /etc/nat/network
cp /etc/nat/network-host1 /etc/nat/network
else
if [ $x == 1 ] && [ $y == 0 ] && [ $z == 1 ] && [ $i == 1 ];
then
rm -f /etc/nat/network
cp /etc/nat/network-host2 /etc/nat/network
else
if [ $x == 1 ] && [ $y == 1 ] && [ $z == 0 ] && [ $i == 1 ];
then
rm -f /etc/nat/network
cp /etc/nat/network-host3 /etc/nat/network
else
if [ $x == 1 ] && [ $y == 1 ] && [ $z == 1 ] && [ $i == 0 ];
then
rm -f /etc/nat/network
cp /etc/nat/network-host4 /etc/nat/network
else
if [ $x == 0 ] && [ $y == 0 ] && [ $z == 1 ] && [ $i == 1 ];
then
rm -f /etc/nat/network
cp /etc/nat/network-host12 /etc/nat/network
else
if [ $x == 1 ] && [ $y == 0 ] && [ $z == 0 ] && [ $i == 1 ];
then
rm -f /etc/nat/network
cp /etc/nat/network-host23 /etc/nat/network
else
if [ $x == 0 ] && [ $y == 1 ] && [ $z == 0 ] && [ $i == 1 ];
then
rm -f /etc/nat/network
cp /etc/nat/network-host13 /etc/nat/network
else
if [ $x == 0 ] && [ $y == 1 ] && [ $z == 1 ] && [ $i == 0 ];
then
rm -f /etc/nat/network
cp /etc/nat/network-host14 /etc/nat/network
else
if [ $x == 1 ] && [ $y == 0 ] && [ $z == 1 ] && [ $i == 0 ];
then
rm -f /etc/nat/network
cp /etc/nat/network-host24 /etc/nat/network
else
if [ $x == 1 ] && [ $y == 1 ] && [ $z == 0 ] && [ $i == 0 ];
then
rm -f /etc/nat/network
cp /etc/nat/network-host34 /etc/nat/network
else
if [ $x == 0 ] && [ $y == 0 ] && [ $z == 0 ] && [ $i == 1 ];
then
rm -f /etc/nat/network
cp /etc/nat/network-host123 /etc/nat/network
else
if [ $x == 0 ] && [ $y == 0 ] && [ $z == 1 ] && [ $i == 0 ];
then
rm -f /etc/nat/network
cp /etc/nat/network-host124 /etc/nat/network
else
if [ $x == 0 ] && [ $y == 1 ] && [ $z == 0 ] && [ $i == 0 ];
then
rm -f /etc/nat/network
cp /etc/nat/network-host134 /etc/nat/network
else
if [ $x == 1 ] && [ $y == 0 ] && [ $z == 0 ] && [ $i == 0 ];
then
rm -f /etc/nat/network
cp /etc/nat/network-host234 /etc/nat/network
else
rm -f /etc/nat/network
cp /etc/nat/network-ok /etc/nat/network
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
fi
chmod +x /etc/nat/network
/etc/nat/delnet
/etc/nat/network


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

network
#!/bin/bash
route add -net 0.0.0.0/4 gw 172.16.1.200
route add -net 16.0.0.0/4 gw 172.16.1.201
route add -net 32.0.0.0/4 gw 172.16.1.202
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.200
route add -net 80.0.0.0/4 gw 172.16.1.201
route add -net 96.0.0.0/4 gw 172.16.1.202
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.200
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.200
route add -net 208.0.0.0/4 gw 172.16.1.201
route add -net 224.0.0.0/4 gw 172.16.1.202
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.200» >> /etc/nat/delnet
echo «route del -net 16.0.0.0/4 gw 172.16.1.201» >> /etc/nat/delnet
echo «route del -net 32.0.0.0/4 gw 172.16.1.202» >> /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.200» >> /etc/nat/delnet
echo «route del -net 80.0.0.0/4 gw 172.16.1.201» >> /etc/nat/delnet
echo «route del -net 96.0.0.0/4 gw 172.16.1.202» >> /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.200» >> /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.200» >> /etc/nat/delnet
echo «route del -net 208.0.0.0/4 gw 172.16.1.201» >> /etc/nat/delnet
echo «route del -net 224.0.0.0/4 gw 172.16.1.202» >> /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

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

В качестве примера приведу шаблоны
network-host1
#!/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

network-host123
#!/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

Из примеров можно понять принцип, по которому делались шаблоны.

P.S. Несмотря на корявость решения, данный шлюз уже в течении полугода успешно пускает в сеть порядка 100 пользователей. С минимумом проблем.

Комментарии (16)


  1. dezconnect
    23.04.2015 16:59
    +1

    Вспомнились годы ~2003-2005 когда в кампусах примерно так и запиливали. Думал что прочитаю что нибудь о GPON или около того а тут… Ну разве что как ностальгия по ушедшему времени =)


  1. dannyzubarev
    23.04.2015 17:22
    +5

    Эх, пионеры. :)


  1. Dagobertus
    24.04.2015 04:22
    +1

    У меня такой вопрос, а зачем для каждого клиента отдельное правило с MASQUERADE?


  1. Zagrebelion
    24.04.2015 08:38

    если у вас есть 4 дсл-линии, а посёлок на крайнем Севере с большими расстояниями, значит дслам находиться где-то недалеко, то есть где-то недалеко есть место с нормальным аплинком.

    Не пробовали пообщаться с провайдером на тему изменения схемы включения? Заменить 4 модема на один порт в коммутаторе?


  1. Foxcool
    24.04.2015 09:14

    А еще можно покрыть поселок Mesh Wi-Fi, используя batman или CJDNS (а можно и то и это). Для быстрого подключения клиентов не придется тянуть кабель (только по желанию ускорения можно будет между дальними сегментами проложить гигабит тот же), достаточно дать новому юзеру прошитый роутер.


    1. vadim_shb
      24.04.2015 15:40

      И все это будет работать в описываемых условиях крайне непредсказуемо… Лучше уж кабели протянуть один раз, чем думать почему у пользователей «интернет тормозит». Может погода влияет на сигнал… Может, две выключенных из разетки ноды меш-сети… Может просто 10 устройств подключившихся к одной ноде одновременно… Короче, намучался я однажды в подобной колхозной сети с большим количеством беспроводных состовляющих… Никому не советую.


      1. OXOTH1K
        25.04.2015 17:58

        Подключаем в частниках в Волгограде интернет по беспроводному доступу (база + направленная антенна у абонента). Очень даже все предсказуемо работает.


        1. vadim_shb
          28.04.2015 13:25

          Мне кажется тут разница как раз в подходе. Промышленное оборудование в виде База + направленная антенна, против колхозной меш-сети на домашних роутерах. Если, конечно, изначальный пост был про постройку сети на хорошем оборудовании и с расчетами, то можно заставить работать предсказуемо.


  1. mickvav
    24.04.2015 09:55
    +1

    Люди, откройте для себя ipset. Иначе ваш мульти-masquerade ляжет со временем в нафиг.


    1. alexkbs
      24.04.2015 11:07
      +2

      и про iptables-restore тоже можно почитать


      1. ValdikSS
        24.04.2015 16:05

        А еще лучше — ferm


        1. mickvav
          24.04.2015 21:19
          +1

          iptables сам по себе, по сути, язык. Зачем ещё один слой абстракции? Чтобы баги было ловить веселее?


          1. ValdikSS
            24.04.2015 22:31

            Большое количество iptables-правил поддерживать неудобно, а с ferm — удобно.


  1. eldarmusin
    24.04.2015 17:42

    IPCop когда то в кампусе устанавливал. Администрирование по вэбу возможно.


  1. joffadark
    24.04.2015 19:00

    насколько 100 пользователей нагружают сеть / шлюз? есть какая-нибудь статистика по трафику? характеристики машины-шлюза?

    как-то делал подобное решение на базе Mikrotik RB-750. Клиенты подключались по PPTP и OpenVPN(на выбор) и маршрутизировались в 3 сети, подключенные аплинком к микротику.


  1. mifistor
    28.04.2015 17:58

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