Linux сервер чаще всего применяют для того, чтобы организовать общий доступ в интернет для определенного количества машин. Отдать предпочтение этой операционной системе можно благодаря ее низкой стоимости и относительно невысоким требованиям к железу. Чаще всего Linux сервер устанавливают первым в организации, а это может вызвать определенные сложности у администраторов, которые ранее не использовали данную операционную систему. В этой статье мы детально опишем настройку роутера (что включает в себя NAT, DHCP, Squid) на базе Ubuntu Server.
Установка и настройка первоначальных параметров.
Ubuntu Server имеет возможность предустановки выбранных ролей сервера, а также отличается от своей настольной версии тем, что в ней отсутствуют пользовательские приложения и графические оболочки GUI, хотя по большому счету это относиться к любой версии Ubuntu, а также с небольшими поправками для любого Linux дистрибутива. Установка Ubuntu Server обычно не вызывает сложностей так как происходит на русском языке в текстовом режиме.
Из предложенного списка программного обеспечения, нам нужен только OpenSSH, который используется для удаленного доступа к серверу. Опытный пользователь может без проблем установить все необходимые пакеты при помощи пункта Manual package selection. Но если это первый сервер, который вы настраиваете, то лучше мы установим все необходимые для работы программы позже. Такая последовательность нужна для того, чтобы мы могли успешно справиться с возможными неполадками, которые могут возникнуть в процессе установки, а также это позволит иметь четкое представление о назначении каждого устанавливаемого пакета.
Итак, после установки Ubuntu Server система перезагружается и мы видим черный экран командной строки. Конечно администраторов, которые привыкли к консоли Windows, это может слегка удивить, но следует учесть, что все серверные роли Linux настраиваются только через консоль и файлы конфигурации.
Вначале следует настроить сетевые соединения. Для этого в консоли вводим:
sudo nano /etc/network/interfaces
Данная команда открывает в консольном редакторе nano файл конфигурации с сетевыми интерфейсами, аналогично рисунку. Пока там прописан только один интерфейс eth0, который настроен на работу по DHCP. К eth0 в нашем случае подключен ADSL модем (хотя это может быть любая сеть провайдера), а eth1 смотрит во внутреннюю сеть. На внешнем интерфейсе IP адрес 192.168.1.2, шлюз (ADSL модем) 192.168.1.1, внутренняя сеть находиться в диапазоне 10.0.0.1 – 254. Тогда наши настройки будут выглядеть следующим образом:
auto eth0
iface eth0 inet static
address 192.168.1.2
netmask 255.255.255.0
gateway 192.168.1.1auto 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 провайдера или адреса DNS серверов иначе несможете просматривать сайты. OpenDNS:
#OpenDNS Servers
nameserver 208.67.222.222
nameserver 208.67.220.220
Далее сохраняем настройки и перезагружаемся. Также вместо перезагрузки можно перезапустить сетевые службы:
sudo /etc/init.d/networking restart
Попробуйте пингануть любой сайт
ping ya.ru
Если пинг проходит значит всё хорошо.
Итак, сеть у нас уже настроена, а это значить, что можно переходить к следующим этапам настроек, но прежде для удобства администрирования следует установить несколько программных пакетов. Обновляем список доступного программного обеспечения:
sudo apt-get update
А затем обновляем их до актуальной версии:
sudo apt-get upgrade
Следующим этапом устанавливаем файловый менеджер подобный к Norton Commander или Far — Midnight Commander (mc):
sudo apt-get install mc
Для того чтобы запустить Midnight Commander достаточно ввести его короткое имя — mc в консоли. Также для удобства рекомендуем сразу включить встроенный редактор, он намного удобней, чем nano. Для этого выполняем следующее: F9 — Настройки — Конфигурация — Встроенный редактор.
Чтобы не бегать к серверу каждый раз, устанавливаем OpenSSH, он помогает удаленно управлять сервером из любого места (например, из дома) по защищенному протоколу:
sudo apt-get install ssh
Для того чтобы подключиться с Windows можно использовать программу PuTTY, а для корректного отображения символов в закладке Window – Translation выбираем кодировку UTF8. Если есть необходимость ограничения доступа к серверу можно дописать в файл /etc/ssh/sshd_config параметр AllowUsers, указав пользователя, который имеет удаленный доступ по SSH, например пользователь admin:
AllowUsers admin
Для разрешения доступа группе пользователей используют параметр AllowGroups, а для блокировки доступа определенным группам или пользователям используют DenyGroups и DenyUsers.
Настраиваем NAT
Для того чтобы организовать общий доступ к сети интернет нужно настроить трансляцию сетевых адресов (NAT), это позволяет сетевым службам внутренней сети получить доступ к внешней сети. Для данной настройки достаточно будет выполнить одну команду, правда есть одна особенность: все будет работать только для перезагрузки. На данный момент в Linux нет механизма сохраняющего настройки iptables при перезагрузке сети или сервера. Для устранения данного неудобства мы вынесем эти настройки в отдельный скрипт, который запускается при загрузке системы. Для начала создаем файл скрипта:
sudo touch /etc/nat
Затем открываем его в редакторе Midnight Commander (F4) и вносим следующий текст:
#!/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 -o eth0 -j REJECT
Внеся вышеуказанные настройки, сохраняем их (F2), а для автоматического запуска скрипта вновь открываем /etc/network/interfaces и в самом конце файла дописываем:
post-up /etc/nat
Также не забываем дать нашему скрипту права на исполнение:
sudo chmod +x /etc/nat
Перезапускаем сеть:
sudo /etc/init.d/networking restart
Если нигде небыли допущены ошибки все будет работать. Для того чтобы проверить работоспособность, на машинах внутренней сети укажем в качестве шлюза и DNS адрес нашего роутера: 10.0.0.1 и пропингуем любой внешний адрес, к примеру один из OpenDNS серверов: 208.67.222.222. Вы, наверное, удивитесь — интернет не работает. Почему? Ведь мы указали наш роутер в качестве DNS сервера, а он пока что таким не является. Конечно, можно прописать DNS на клиентской машине, но если внезапно изменяться DNS сервера? Очень неудобно будет каждый раз бегать их перепрошивать.
Самым приемлемым решением будет поднять на нашем роутере полноценный DNS сервер, но, как правило, это избыточно, поэтому ограничиваемся простым DNS (а также и DHCP) сервером Dnsmasq.
sudo apt-get install dnsmasq
После выполнения установки открываем /etc/dnsmasq.conf, находим, раскомментируем и вносим изменения в строку, что разрешает серверу принимать DNS запросы из внутренней сети:
listen-address=127.0.0.1, 10.0.0.1
Перезапускаем DNS сервер:
sudo /etc/init.d/dnsmasq restart
После правильного выполнения вышеуказанных настроек на клиентских машинах начнет работать интернет.
Настраиваем DHCP
Теперь, когда наш сервер начал работу необходимо настроить клиентские машины. Конечно, все нужные параметры можно прописать вручную, но что делать, если клиентских машин слишком много, и они расположены по всему зданию? В этом случае мы и воспользуемся протоколом DHCP. Он позволяет автоматически получать все, необходимые для корректной работы, сетевые настройки. Ранее установленный Dnsmasq и выступит в качестве DHCP сервера, который очень просто настроить. Для этого открываем /etc/dnsmasq.conf и указываем диапазон выдаваемых адресов (в нашем случае 10.0.0.100-150), сетевую маску и время использования IP адреса:
dhcp-range=10.0.0.100,10.0.0.150,255.255.255.0,12h
Адреса DNS сервера и шлюза сервер из системных настроек берет автоматически. Затем еще раз перезапускаем Dnsmasq:
sudo /etc/init.d/dnsmasq restart
После проделанной работы можно выставить на клиенте автоматическое получение IP адреса и убедиться в нормальной работе сервера. Выданные адреса можно посмотреть, выполнив команду:
cat /var/log/syslog | grep DHCPOFFER
Все выданные IP адреса и MAC адреса будут перечислены, с указанием кому они присвоены.
Настройка кэширующего прокси-сервера Squid.
В достаточно большой сети некоторая часть трафика повторяется, и часть его иногда достигает 50%. Очень удобно кэшировать часто повторяющиеся запросы, снизив нагрузку на канал, тем самым ускорить выдачу пользователю запрашиваемых страниц и сэкономить входящий трафик. Для выполнения этих задач используем Squid — кэширующий прокси с огромными возможностями.
sudo apt-get install squid
Устанавливаем прокси-сервер и настраиваем его:
sudo /etc/init.d/squid stop
Открываем /etc/squid/squid.conf, находим и корректируем следующие строки, не забыв их раскомментировать:
Указываем порт:
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
Устанавливаем лимит использования памяти:
memory_pools on
memory_pools_limit 50 MB
Задаем язык вывода ошибок для пользователя
error_directory /usr/share/squid/errors/Russian-koi8-r
Важное замечание! В версии Ubuntu 9.10 эта строка может выглядеть так, поэтому рекомендуем проверить правильность пути:
error_directory /usr/share/squid/errors/ru
Затем сохраняем файл конфигурации. Теперь строим кэш и запускаем:
sudo /usr/sbin/squid -z
sudo /etc/init.d/squid start
Для того чтобы проверить настройки на клиентской машине в браузере указываем использование прокси-сервера с адресом 10.0.0.1 и портом 3128 и убеждаемся что все исправно работает.
Теперь остается только настроить работу прокси-сервера, чтобы http трафик заворачивался на Squid автоматом, без прописывания прокси на клиенте. Для этого следует открыть /etc/nat и дописать в конце строку:
# Заворачиваем http на прокси
iptables -t nat -A PREROUTING -i eth1 -d ! 10.0.0.0/24 -p tcp -m multiport --dport 80,8080 -j DNAT --to 10.0.0.1:3128
Перезапускаем сеть:
sudo /etc/init.d/networking restart
Все настройки выполнены, и мы можем наслаждаться работой нашего сервера, который позволяет не только организовать общий доступ к сети интернет, но и кэширует http трафик и DNS запросы, а также раздает клиентским машинам для работы в сети необходимые настройки.
Мне понравилось! Занести себе в закладки:
Тоже интересно:
27 Comments к записи Настраиваем роутер на Linux Ubuntu NAT + DHCP + Squid
Создание файлового сервера на Ubuntu 9.10 (Samba) | ManNix.ru
20th May 2010 в 10:44 am
[...] На нашем примере все сетевые настройки получены по DHCP в процессе установки, в ином случае нужно настраивать [...]
rik
3rd July 2010 в 9:06 pm
и днс меняется у мабилки вечно поэтому ещё вопрос что тогда писать в sudo nano /etc/resolv.conf или что вообще делать ?
admin
5th July 2010 в 5:53 pm
тогда стоит указать DNS стороний, не Вашего провайдера. списков полно в интернете
rik
5th July 2010 в 10:40 pm
сделал всё в точь как тут написано! ничего не работает кроме DHCP сервака! на клиентской тачьке всё настраивается айпи днс и получает на 12 часов всё как на картинке! но инет не идёт! а после перезагрузки сеть вообще отваливается и не включается пока не удалиш из интерфейсов настройки
auto eth0
iface eth0 inet static
address 10.0.0.1
netmask 255.255.255.0 (так как инет через гпрс модем второй интерфейс который для дсл модема я не прописывал)
насчёт днс мабилки я посматрел он прописывается в sudo nano /etc/resolv.conf автоматически
но как я уже сказал ничего не пашет а после перезагрузки ещё и сеть отвалилась и инет через трубку не подключается
Life64g
5th September 2010 в 4:12 am
Все завелось, спасибо!!)) Вопросу меня 4 карточки воткнуты, в одну входит интернет в другую выходит, а как сделать так чтоб на остальных 2-х карточках еще раздавался ин-т?
admin
7th September 2010 в 4:07 pm
Life64g, нужно добавить сети, что находятся за вашими другими сетевыми картами в правила NAT'а.
kijimoshike
7th September 2010 в 7:37 pm
А как сделать чтоб аутентифика́ция пользователей проходила по IP + MAC? Не по логину и паролю(благо squid позволяет это) а менно по такой связке.
admin
7th September 2010 в 8:52 pm
Squid позволяет проводит аутентификацию по IP-адресам клиентов. Mac-адрес не виден за пределами маршрутизатора, так что использовать его в связке при аутентификации нет смысла. Если речь идет только о вашей локальной сети, то можно настроить dhcp-сервер таким образом(если конечно его использование допустимо), что определенным клиентам с заранее заданными маками будет выдаваться всегда один и тот же ip. Пользователям закрыть доступ на изменение настроек сетевого интерфейса.
Life64g
8th September 2010 в 1:29 pm
А можно по подробнее? Что именно нужно вписать в NAT?
ApeX-IM
3rd October 2010 в 5:30 am
С linux только знакомлюсь, статья супер, получилось все с первого раза! Огромное спасибо!
Игорь
17th October 2010 в 2:56 pm
Подскажите строки, наверно иптаблеса, чтоб в сеть пропустил ip-tv протокола и порты
Artur
13th November 2010 в 1:40 am
обязательно ли настраивать squid для того чтобы локальные компы в инет пускало??
admin
15th November 2010 в 2:56 pm
Squid это прокси-сервер, используется для управления доступом в интернет. Если вам просто нужно выпустить локалку во внешнюю сеть, сквид не обязателен, будет достаточно настроить NAT.
woldemar
7th December 2010 в 2:32 pm
сделал все как написано но нет на рабочии станции не идет
Alexandr
13th December 2010 в 2:52 pm
Статья отличная, но на определенном этапе зашел в тупик. при настройке DNS вношу изменение в строкe файла dnsmasq (listen-address=127.0.0.1, 10.0.0.1). После этого ничего не меняется, т.е. инет на клиентах работает только при указании днс адресов (собственно как было до установки dnsmasq). В чем может быть проблема?
Alexandr
23rd December 2010 в 3:16 pm
Все отлично, но чего то не хватает. При таких настройках интернет неожиданным образом то пропадает, то появляется.
mistic
24th May 2011 в 5:39 pm
Небольшая опечатка в тексте: «etc0»
«Пока там прописан только один интерфейс etc0, который настроен на работу по DHCP. К eth0 в нашем случае подключен ADSL модем»
admin
25th May 2011 в 9:18 am
Спасибо, поправили
Герман
9th June 2011 в 10:31 pm
огромное спасибо за мануал!
я начинающий пользователь *.nix систем. поднял у себя на работе роутер по Вашему мануалу (все сделал как написано, только адресация в локалке отличается). и появились вопросы сразу.
OS: Ubuntu Server 11.04
инет от прова приходит по pppoe.
внешний интерфейс:
auto eth0
iface eth0 inet dhcp
в /etc/resolv.conf прописаны руками DNS сервера провайдера.
внутренний интерфейс:
auto eth1
iface eth1 inet static
address 192.168.0.10
netmask 255.255.255.0
интернет на компьютерах пользователей заработал, но не ходит почта и не работает аська, также не работают некоторые банк-клиенты.
конфиги 100500 раз проверял! все точно как в этом мануале. подскажите ПЛЗ где я что не так делаю?
есть подозрение что в /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 192.168.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
# Заворачиваем http на прокси
iptables -t nat -A PREROUTING -i eth1 -d ! 192.168.0.0/24 -p tcp -m multiport --dport 80,8080 -j DNAT --to 192.168.0.10:3128
может быть необходимо вместо eth0 прописать ppp0???
Gtntxrf
4th August 2011 в 5:41 pm
Огромное спасибо. Очень полезный труд =-)
Денис
20th August 2011 в 7:42 pm
При перезапуске сети выдает ошибку, если убрать команду запуска скрипта из /etc/network/interface, то все нормально работает. В чем может быть проблема?
AKC
1st November 2011 в 1:43 pm
Такая же проблемв при подключении модема в режиме Bridge не работают isq skype https — как поменять конфиг
Антон
9th December 2011 в 8:25 am
Герман, а разве вообще нат и прокси одновременно нужно делать?
у вас на проксю ж только 80,8080 порты идут, вот интернет и работает, а вот с остальным нет, может как раз конфликты.
Костя
11th January 2012 в 8:58 am
Здравствуйте, сталкнулся с такой проблеммой, сделал все по мануалу как описано выше, после когда запускаю все, все работает как надо, но только первые пару минут, комп который подключен по сети перестает видеть пинг 10.0.0.1, интенет на сервере работает, а вот клиент не видет сервер, после если перезапускаю службу нетворк, первые 30 секунд все хорошо, после опять обвал. что может быть?
Костя
11th January 2012 в 10:10 am
Перепрочитал мануал, с сетью разобрался, но интернет не работает на клиенте =( все сделал по монуалу, где капать?
Viktor
22nd January 2012 в 1:17 pm
Спасибо огромное за статью!!! Очень помогла в настройке домашнего сервера под раздачу интернета. По поводу комментария Германа почта, аська и банк-клиенты не работают вероятно из-за отфутболивания внешних запросов на подключение
# Запрещаем доступ снаружи во внутреннюю сеть
iptables -A FORWARD -i eth0 -o eth1 -j REJECT
попробуй без этой строчки или пробрось отдельно порты на нужные программы.
Евгений
13th February 2012 в 10:12 pm
Таже история, что и у Кости и еще у кого-то)))
DHCP на локалку IP раздает нормально, но доступа к инету нет. Сервак инет видет.
При перезагрузке сети пишет, что /bin/sh: /etc/nat не найден
Ubuntu 10.04
Подскажите, в чем может быть проблема?