Раздача Интернета в локальную сеть (ICS: Internet Connection Sharing)
Для организации совместного доступа в Интернет с помощью общего доступа к подключению Интернета на сервере должна быть одна сетевая карта для подключения к внутренней сети и еще одна карта или модем для подключения к Интернету.
На сервере
Исходные данные: Оба компьютера соединены по сети. На сервере установлено две сетевые карты:
- eth0 - к ней подключен интернет;
- eth1 - к ней подключена локальная сеть.
Настройте вторую карту (eth1) так:
- IP: 192.168.0.1
- Netmask: 255.255.255.0
Это можно сделать вручную или используя терминал:
sudo ifconfig eth1 192.168.0.1 netmask 255.255.255.0sudo ifconfig eth1 upРазрешите направление пакетов. Чтобы сделать это, отредактируйте /etc/sysctl.conf. Откройте сам файл командой:
sudo gedit /etc/sysctl.confА затем вставьте следующую строчку:
net.ipv4.ip_forward=1Для того, чтобы применить это правило до перезагрузки выполните:
sysctl -w net.ipv4.ip_forward="1"Затем добавляем правило для NAT:
Где eth0 название вашего интерфейса через который выходите в интернет. Измените его если используете другой интерфейс (напрмер ppp0) тогда команда будет выглядит иначе:
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADEУстановите и запустите пакет для раздачи пакетов по сети:
sudo apt-get install dnsmasqИли, вы можете использовать DNS провайдера.
Чтобы NAT работал после перезагрузки сохраняем настройки iptables в файл:
iptables-save > /etc/iptables.up.rulesИ добавляем в конец файла:
sudo gedit /etc/network/interfacesЭту строчку, для автоматической подгрузки правится:
pre-up iptables-restore < /etc/iptables.up.rulesТакже в этот файл добавляем правила роутинга:
up route add -net 192.168.0.0 netmask 255.255.255.0 dev eth1up route add -net 0.0.0.0 netmask 255.255.255.255 dev eth0sudo nano /etc/dnsmasq.confinterface=eth1 # интерфейс, который будет слушать dnsmasqlisten-address=192.168.0.1 # адрес, на котором будет находиться dnsmasqbind-interfaces eth1 # слушать только интерфейсdhcp-range=192.168.0.5,192.168.0.50,255.255.255.0,24h1 # диапазон выдаваемых адресовdhcp-option=3,192.168.0.1 # шлюз по умолчаниюПерезапускаем dnsmasq:
sudo service dnsmasq restartНастраиваем клиентские компьютеры на автоматическое получение адреса.
Если после перезагрузки правила iptables не восстанавливаются, добавьте:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADEв любой стартовый скрипт (rc.local например). Вместо eth0 надо написать ppp0, если этот интерфейс получает интернет от провайдера:
3.2 Настройка роутера (NAT с DHCP и Squid)
Приступим к настройке:
В первую очередь настроим сетевые соединения. Вводим в консоли:
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. Тогда настройки будут выглядеть следующим образом:
4 auto eth0
iface eth0 inet static
address 192.168.1.2
netmask 255.255.255.0
gateway 192.168.1.1
auto eth1
iface eth1 inet static
address 10.0.0.1
netmask 255.255.255.0
Сохраняем изменения Ctrl+O и выходим Ctrl+X. Теперь нужно настроить DNS, для этого выполняем:
В этом файле необходимо указать адреса DNS серверов, лучше всего указать DNS провайдера или OpenDNS.
#OpenDNS Serversnameserver 208.67.222.222
nameserver 208.67.220.220
Сохраняем. Теперь нужно перезапустить сетевые службы (либо перезагрузиться):
sudo /etc/init.d/networking restartСобственно сеть настроена, можно переходить к следующему этапу, однако рекомендуется установить еще несколько пакетов для удобства администрирования. Сначала обновим список доступных пакетов:
sudo apt-get updateТакже рекомендуется обновить версии пакетов до актуальных:
sudo apt-get upgradeТеперь установим Midnight Commander (mc), файловый менеджер по образу и подобию Norton Commander или Far:
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, либо запретить доступ определенным пользователям / группам использовав DenyUsers и DenyGroups.
Настраиваем NAT
Для организации общего доступа к интернет необходимо настроить трансляцию сетевых адресов (NAT), что позволит сетевым службам внутренней сети получать доступ к внешней сети. Для этого достаточно выполнить всего одну команду, и мы вынесем эти настройки в отдельный скрипт, запускаемый при загрузке системы. Сначала создадим файл скрипта:
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 -m state --state ESTABLISHED,RELATED -j ACCEPT
Запрещаем доступ снаружи во внутреннюю сеть
iptables -A FORWARD -i eth0 -o eth1 -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 (а также и DHCP) сервером Squid.
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, который позволяет клиентским машинам получать сетевые настройки автоматически. В качестве DHCP сервера выступит уже установленный Dnsmasq. Настроить его не просто, а очень просто, для чего снова открываем /etc/dnsmasq.conf.
Все что нам надо, это задать диапазон выдаваемых адресов (в нашем случае 10.0.0.100-150), сетевую маску и время, на которое выдается IP адрес:
Адреса DNS сервера и шлюза сервер берет автоматически из системных настроек. Еще раз перезапускаем Dnsmasq:
sudo /etc/init.d/dnsmasq restartТеперь можно выставить на клиенте автоматическое получение IP адреса и убедиться, что все работает нормально.
Просмотреть выданные адреса можно командой:
cat /var/log/syslog | grep DHCPOFFERВ выдаче будут перечислены выданные IP адреса и MAC адреса которым они выданы.