Всем привет. Данная статья существует во многих вариантах. Я не буду писать о том как и когда мне это понадобилось а о том как создать простой Server Router (так мы и будем его называть). Например необходимо создать сервер который должен раздавать интернет по сети и всевозможные настройки, но при этом нам не бегать и не производить ни каких настроек на пользовательских компьютерах (User 1-4). И управлять на расстоянии (на любом компьютере который находится в одной сети). Предположим что интернет у нас будет браться из ADSL модема и настроенного в режиме роутера. Показано на схеме:
И так нам понадобится установленный дистрибутив Ubuntu Server 10.04 или выше. Две установленные сетевые карты или задействовать уже интегрированные сетевые разъёмы. Включаем наш будущий сервер.Вводим наш логин и пароль (ПАРОЛЬ ПРИ ВВОДЕ НЕ ВИДНО). Получаем права суперпользователя ROOT получить можно 2 способами:
sudo su
Даёт права суперпользователя только на одну сессию, или
sudo passwd root
Активирует суперпользователя (нужно будет указать желаемый нам пароль). Но сидеть под ROOT я бы вам не советовал по разным причинам. Для того чтобы нам можно было настраивать наш сервер удалённо, нужно установить такой замечательный сервис как SSH
Установка SSH сервера и настройка:
apt-get install ssh
теперь можно устанавливать на удалённой машине клиент SSH, например PuTTY и управлять нашим сервером. Как настроить SSH сервер и как работать с PuTTY ознакомьтесь здесь
Настраиваем сеть:
Так как мы будем брать интернет из ADSL модема подключённого в режиме роутера к нашему серверу, модем должен иметь IP адрес. IP адрес нашего модема 192.168.0.1 и он же будет являться шлюзом на сетевом интерфейсе (сетевая карта) eth0. А интернет в сеть уходить у нас будет по сетевому интерфейсу eth1 и иметь сетевой IP адрес 10.0.0.1. И так чтобы всё это организовать нам потребуется сначала настроить эти самые интерфейсы. Настройки интерфейсов хранятся по адресу /etc/network/interfaces чтобы нам отредактировать этот конфигурационный файл сокр.конфиг. Нам нужно открыть это в редакторе NANO (это стандартный редактор) набрать следующую команду:
nano /etc/network/interfaces
Увидим следующую картитну
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet dhcp
Теперь нам нужно дописать следуещее:
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet static address 192.168.0.2 netmask 255.255.255.0 gateway 192.168.0.1
этот символ # означает комментарий и никаких действий c этой строкой не произойдёт, так как вначале перед условием стоит решётка. Когда говорят снять комментарий это означает что надо просто удалить символ # а если говорится нужно закомментировать то надо наоборот поставить #
auto eth0 говорит о том что наш интерфейс eth0 (смотрит в сторону модема ADSL) включается вместе с загрузкой системы.
address 192.168.0.2 — это IP адрес интерфейса eth0
netmask 255.255.255.0 — это маска подсети.
Например, узел с IP-адресом 192.168.0.1 и маской подсети 255.255.255.0 находится в сети 192.168.0.0/24. Это означает что в этой подсети IP адреса могут быть такого диапазона 192.168.0.0-254. Смотрите ниже схему
gateway 192.168.0.1 — это шлюз а точнее откуда будет браться интернет.
Должно выглядеть вот так
auto eth0 iface eth0 inet static address 192.168.0.2 netmask 255.255.255.0 gateway 192.168.0.1 auto eth1 iface eth1 inet static address 10.0.0.1 netmask 255.255.255.0
Сохраним изменения нажатием клавиш Ctrl + O и выходим нажатием Ctrl + X
После чего необходимо настроить DNS, для этого вводим следующую команду в строке:
sudo nano /etc/resolv.conf
В этом конфигурационном файле нужно прописать адреса DNS серверов, я вам советую прописать адреса провайдера в моём случае это первичный 46.42.0.65 и вторичный 46.42.4.65. Внимание!!!! Ваши DNS сервера должны соответствовать адресам которые выдал провайдер
# IP адреса DNS серверов вашего провайдера nameserver 46.42.0.65 nameserver 46.42.4.65
Сохраняемся Ctrl + O и выходим Ctrl +x
После этого нужно перезагрузить сеть следующей командой:
/etc/init.d/networking restart
Далее обновляем список доступных нам пакетов следующей командой
apt-get update
Сразу обновим все пакеты:
sudo apt-get upgrade
Настраиваем NAT
Для того чтобы все службы которые находятся внутри нашей сети имели доступ к внешней (интернет) нужно выполнить одну команду, но есть одно но. Всё это будет работать пока мы не перезагрузим сервер поэтом придётся писать скрипт который естественно будет каждый раз загружаться вместе с системой. Вначале нам нужно создать пустой файл для будущего скрипта. Ничего сложного в этом нет и так приступим.
sudo touch /etc/nat
После того как создали файл откроем его в редакторе Nano
nano /etc/nat #!/bin/sh # Включаем форвардинг пакетов echo 1 > /proc/sys/net/ipv4/ip_forward # Разрешаем трафик на loopback-интерфейсе iptables -A INPUT -i lo -j ACCEPT # Разрешаем доступ из внутренней сети наружу iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT # Включаем NAT iptables -t nat -A POSTROUTING -o eth0 -s 10.0.0.0/24 -j MASQUERADE # Разрешаем ответы из внешней сети iptables -A FORWARD -i eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT # Запрещаем доступ снаружи во внутреннюю сеть iptables -A FORWARD -i eth0 -o eth1 -j REJECT
Сохраняемся Ctrl + O и выходим Ctrl + X
Чтобы наш созданный скрипт загружался автоматически нужно его прописать в интерфейсах. Открываем конфиг /etc/network/interfaces и в самый конец дописывем следующее
post-up /etc/nat
И даём ему разрешение на автоматический запуск командой:
sudo chmod +x /etc/nat
Снова перезапускаем сеть:
/etc/init.d/networking restart
По сути сеть настроена и интернет будет работать, но после того как мы в настройках клиентской машины укажем в качестве Шлюза и DNS сервера адрес нашего СерверРоутера: IP 10.0.0.1
Но это нам не подходит так как мы не хотим бегать по клиентским машинам и прописывать адреса (я это до ужаса как не люблю).
Чтобы избежать этих трудностей нам нужно поднять DNS сервер на нашем СерверРоутере. Мы чуток сделаем по другому и настроим кэширующий DNS в паре с DHCP сервером. Всё это вместе имеет такой пакет как Dnsmasq. Чтобы это сделать пишем следующую команду:
apt-get install dnsmasq
И так наш пакет благополучно установился. И сразу же его открываем
nano /etc/dnsmasq.conf
Чтобы наш DNS сервер принимал запросы из сети нужно найти указанную строку и раскомментировать её а точнее убрать этот символ # Для удобства рекомендую пользоваться поиском, командой Ctrl + W
listen-address=127.0.0.1, 10.0.0.1
Сохраняемся и выходим. Перезапускаем наш DNS сервер
/etc/init.d/dnsmasq restart
После всех этих манипуляций должен появиться интернет. Но нам и этого мало. Так как мы хотим минимум настроек на клиентских машинах нужно настроить DHCP сервер который установился вместе с DNS сервером.
Настраиваем DHCP
Настраиваем снова этот конфиг /etc/dnsmasq.conf и ищем следующую строку и указываем в ней желаемый пул адресов а точнее какой диапозон IP адресов он будет выдавать нуждающимся клиентам. Просто напросто первый IP номер означает с какого начинать раздачу а второй предел выдачи. Например поставили новый компьютер (клиент) и подключили кабель к сетевой карте, в этот самый момент если в настройках сетевухи стоит отметка о автоматическом запросе настроек, наш клиент запрашивает у ближайшего DHCP сервера свободный IP адрес, тот в свою очередь проверяет правила и условия прописанные в конфиге /etc/dnsmasq.conf
Если правила соответствуют по отношению к запросу клиента то он выдаёт ему свободный IP, Шлюз и DNS сервера. 12h означает на какое время выдаётся IP адрес.
dhcp-range=10.0.0.100,10.0.0.150,255.255.255.0,12h
Теперь нужно перезагрузить Dnsmasq
/etc/init.d/dnsmasq restart
А следующей командой мы можем посмотреть кому наш DHCP сервер выдал IP адреса
cat /var/log/syslog | grep DHCPOFFER
Дальше мы сделаем прокси сервер с функцией кэширования. Это нужно для того чтобы часто запрашиваемые ресурсы каждый раз по новой не шли через наш интернет-канал а оставался в виде кэша на самом сервере и по последующем запросе этого ресурса трафик не закачивался снова из интернета а брался уже из кэша который хранится на нашем сервере.
Создаём кэширующий прокси-сервер Squid
И так приступим к установке нашего кэширующего прокси-сервера SQUID
apt-get install squid
Приостановим прокси
/etc/init.d/squid stop
Открываем конфиг и редактируем его. Нужно раскомментировать указанные строки
http_port 3128 transparent cache_dir ufs /var/spool/squid 4096 32 256
Так же нужно указать нужные нам внутренние сети а лишние закоммениторовать
acl localnet src 10.0.0.0/24 # RFC1918 possible internal network #acl localnet src 172.16.0.0/12 # RFC1918 possible internal network #acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
И разрешить доступ из внутренней сети
http_access allow localnet
Включаем кэш и задаём лимит (Вам советую установить 50 МВ)
memory_pools on memory_pools_limit 300 MB
Вывод ошибок делаем на Кириллице
error_directory /usr/share/squid/errors/Russian-koi8-r
Всё это дело сохраняем Ctrl + O и выходим Ctrl + X
Создадим кэш
sudo /usr/sbin/squid -z
И запускаем
sudo /etc/init.d/squid start
В принципе всё готово но для удобства чтобы не прописывать на клиентских машинах IP адрес и порт нашего сервера мы сделаем его прозрачным а точнее чтобы весь трафик заворачивался автоматически без прописывания прокси. Открываем в Nano /etc/nat
# Делаем прозрачный прокси iptables -t nat -A PREROUTING -i eth1 -d ! 10.0.0.0/24 -p tcp -m multiport --dport 80,8080 -j DNAT --t o 10.0.0.1:3128
Чтоб всё это заработало перезапускаем наши интерфейсы (сеть)
sudo /etc/init.d/networking restart
И вуоля всё работает! Если это не так значит вы допустили где то ошибку.
И так, что мы имеем? А мы имеем сервер который раздает интернет в сеть при этом сам указывает IP адрес, шлюз, DNS сервер и при этом весь трафик заворачивает на 80 и 8080 порты.
Добрый день.
А правила запрета определённых сайтом можно прописать или они в прозрачном прокси не работают?
а как теперь ограничить некоторым или всем пользователям доступ например к одноклассникам или VK ?
если используем DHCP то как теперь этих пользователей идентифицировать ?
Здравствуйте,не могли бы Вы написать статью,о том,что должно входить в состав роутера (какие программы),если делать его на основе ПС и одного из миниобразов Убунты/Дебиана.
Есть желание сделать роутер,но что в него доставить и как это настроить не понятно.Например у меня пока АДСЛ соединение.Хочу чтобы интернет входил в ПС роутер через модем настроенный бриджем.А дальше всем уже будет рулить этот ПС роутер.
Пока понял, что нужно поставить (чтобы роутер был универсальным) DNS,DHCP,NAt,VPN,SMB,NFS,FTP,Torrent .
# Делаем прозрачный прокси
iptables -t nat -A PREROUTING -i eth1 -d ! 10.0.0.0/24 -p tcp -m multiport —dport 80,8080 -j DNAT —t o 10.0.0.1:3128
У меня на это выдает: Bad argument `10.0.0.0./24`
squid guard -им можно ограничивать доступ