avatar Ubuntu Настройка шлюза локальной сети, на базе Ubuntu 12.04

     Если у вас есть локальная сеть, то для ее клиентов необходимо предоставить доступ в интернет. Для обеспечения данной возможности необходимо настроить шлюз, который будет принимать запросы клиентов и пересылать их во внешний мир, а поступающие ответы, передавать обратно.

В этой статье, я расскажу как настроить шлюз для локальной сети на Ubuntu, схема его работы очень простая, но и защиты он не обеспечивает. Существует распространенное заблуждение что NAT ( Network Address Translation -транслятор сетевых адресов) обеспечивает защиту от внешних угроз, но это далеко не так, у него совершенно другое назначение, фактически это дверь, которая открывается в обе стороны, со всеми вытекающими последствиями…
Если есть необходимость в повышении уровня безопасности, а такая необходимость есть всегда, то тут нужно настраивать «фаерволл», я намеренно не привожу никаких правил на этот случай, т.к. они настраиваются исходя из конкретных задач.
В целом, данная статья планировалась как база, для статей на ближайшие пару лет, на ее основе можно развернуть целую кучу серверов, фактический, данный сервер может обрастать функционалом, исходя из ваших задач и потребностей.

Для работы нам понадобится
1) Система с двумя сетевыми картами-которая будет выполнять функцию шлюза.
2) Клиентский ПК, с которого мы будем тестировать работу шлюза.

Схема работы:


Предполагается, что операционная система у вас установлена, на сервере который имеет 2 сетевых интерфейса.
eth0 — подключение к интернет. (может получать IP адрес динамически, может иметь статический, я опишу оба варианта)
eth1 — подключение к локальной сети, будет иметь статический IP 192.168.10.1 и маску 255.255.255.0
Также, для тестирования нам понадобится клиентская машина, которая будет находиться в локальной сети (операционная система значения не имеет).

Первым делом, настраиваем сетевые интерфейсы сервера:
Поднимаем права до root
sudo su

Вводим пароль.
Редактируем настройки сетевых интерфейсов:
nano /etc/network/interfaces


Навастриваем eth0 (по которому осуществляется подключение к интернет)
Вариант №1- Получение IP по DHCP от провайдера:
auto eth0
iface eth0 inet dhcp


Вариант №2-Статический IP
auto eth0
iface eth0 inet static
address XXX.XXX.XXX.XXX
netmask 255.YYY.YYY.YYY
gateway XXX.XXX.XXX.XXX
dns-nameservers ZZZ.ZZZ.ZZZ.ZZZ


Где:
Вместо XXX.XXX.XXX.XXX вписываем IP адрес, который мы получили от провайдера
Вместо 255.YYY.YYY.YYY -выписываем маску подсети.
Ну и вместо ZZZ.ZZZ.ZZZ.ZZZ вписываем IP адрес DNS сервера.
Настраиваем eth1 (по которому подключается локальная сеть)
auto eth1
iface eth1 inet static
address 192.168.10.1
netmask 255.255.255.0


В результате действий у на должен получиться файл interfaces, примерно, следующего содержания:
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address XXX.XXX.XXX.XXX
netmask 255.YYY.YYY.YYY
gateway XXX.XXX.XXX.XXX

auto eth1
iface eth1 inet static
address 192.168.10.1
netmask 255.255.255.0


Сохраняем изменения, выходим.
Перезапустим сеть:
/etc/init.d/networking restart


Из написанного, думаю понятно, что в локальной сети адрес шлюза и dns сервера, будет 192.168.10.1.

Переходим на к нашему тестовому клиенту, т.к. у нас в сети нет DHCP сервера, то IP адрес мы будем назначать в ручную.
Присваиваем клиенту:
IP 192.168.10.2
маску подсети 255.255.255.0
шлюз 192.168.10.1
DNS 192.168.10.1

пробуем с клиента принговать 192.168.10.1 — запросы должны бегать нормально.

Переходим на наш шлюз.
Установим пакет dnsmasq, он необходим для перенаправления DNS запросов, вышестоящим серверам.
apt-get install dnsmasq


Возвращаемся к клиенту, выполняем на нем
nslookup mail.ru

В ответ подучаем:
Сервер: UnKnown
Address: 192.168.10.1

Имя: mail.ru
Addresses: 94.100.191.201
94.100.191.204
94.100.191.203
94.100.191.202
Отлично, разрешение имен работает, но если мы попробуем открыть страницу mail.ru, то у нас ничего не получится, потому что не настроена маршрутизация пакетов.
Настроим ее:
Первым делом, разрешаем перенаправление пакетов:
nano /etc/sysctl.conf

необходимо найти строку и снять с нее комментарий:
net.ipv4.ip_forward=1

Сохраняем изменения и выходим

Теперь, нам необходимо добавить правила для маршрутизации пакетов:
nano /etc/rc.local

Добавим перед строкой exit 0
iptables -F
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o eth0 -j REJECT
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu


Значение можно разобрать самостоятельно (будет в качестве домашнего задания), на форуме ubuntu был отличный FAQ по настройке iptables.
Сохраняем изменения, и перезагружаем сервер
reboot

Дождемся загрузки сервера и перейдя к клиентской системе, пробуем открыть сайт Mail.ru-все должно открываться!

Вот так, настраивается шлюз для локальной сети. Это, одно из самых простых решений.

144 комментария

avatar
Я конечно не спец по Linux, но в /etc/network/interfaces я бы дописал к eth0 (подключение к Интернет) строчку:
auto eth0
iface eth0 inet static
address XXX.XXX.XXX.XXX
netmask 255.YYY.YYY.YYY
gateway XXX.XXX.XXX.XXX
dns-nameservers ZZZ.ZZZ.ZZZ.ZZZ

, где ZZZ.ZZZ.ZZZ.ZZZ — IP-адрес DNS-сервера, выданный провайдером.

offtopic: Может еще и broadcast прописать?
avatar
Блин… Еще одна штука беспокоит: после ребута все правила iptables слетят. Поэтому я их через sh-скрипт в автозагрузку постоянно пихал (Ubuntu 11.10). Или это уже не требуется в Ubuntu 12.04?
avatar
если из записать в rc.local то ничего не слетает…
avatar
Понял. Да. Спасибо. Я виноват — не углядел.
avatar
После чистой установки не мог настроить сеть на Ubuntu server 12.04, DHCP нормально работает, а static не хочет. Пришел к такому выводу, что настройки 12.04 должны быть вида:

auto eth0
iface eth0 inet static
address XXX.XXX.XXX.XXX
netmask 255.YYY.YYY.YYY
dns-nameservers ZZZ.ZZZ.ZZZ.ZZZ
gateway XXX.XXX.XXX.XXX
Как подсказал zsymbol

Еще хочется добавить, что после обновлении с 11.10 до 12.04 командой:

sudo do-release-upgrade

настройки сетевой карты не менялись (dns-nameservers не прописывал) — сервер работает нормально, странно конечно, но работает.
avatar
Спасибо за уточнение, статью поправил.
avatar
Доброго времени суток. Сразу хочу извениться, если ответ на мой вопрос уже существует на просторах этого сайт.
Вопрос следующий. У меня дома стоит Ubuntu 12.04, мне надо что бы с соседнего компьютера, на котором стоит Windows 7 и у которого есть доступ в интернет, получить как раз этот доступ в интеренет для моей машинки, с Ubuntu. На компьюторе с виндоус две сетевые карты, через одну он соединен с шлюзом провайдера, а через второй с моим компьютером.
avatar
Вот, только вместо Wi-FI -ethernet howitmake.ru/blog/win/9.html
avatar
в общем пробывал по мануалу.
Расшарил соединение к интернету на виндоус 7, на второй сетевухе прописал в ручную ип 192.168.0.1, маску 255.255.255.0. На убунту в настройках соединения написал ип адрес 192.168.0.2, маска этаже, шлюз 192.168.0.1 и днс 192.168.0.1. Потом выбераю на рабочем столе это соединение, выходит сообщение «соединение не доступно», примерно так. К тому же не пингуются машины.В свое время что бы настроить интернет для двух виндоус, пришлось прыгать с бубном.
Вопрос остался открытым =(
avatar
Там не требуется ничего прописывать руками, там достаточно указать подключение к интернет и разрешить к нему общий доступ и выбрать сеть которой будет предоставляться доступ-все! клиентов настраивать не требуется, настройки сети они будут получать автоматически.

З.Ы. Ваш вопрос, не связан с темой данного поста, по этому, чтобы не флудить не по теме, пишите в личку…
avatar
Здравствуйте!
не знаю почему но не идет по этой настройке интернет к пользователям. Все сделал как описано у Вас сам сервер подрубился к интернету пользовательская машина пингует 2-ю сетевуху eth1! В чем может быть проблема (интернет получаю с подобного сервера только на нем версия 8 ubunt)Помогите пожалуйста очень нужно!
avatar
Ваш сервер имеет подключение к интернет?
Пользователи локальной сети могут подключаться к вашему серверу?
От ваших пользователей ходят пинги к серверу который раздает интернет вашему серверу?
avatar
спасибо за статьи!

помогла вот эта статья Настройка кеширующего DNS сервера (BIND) для локальной сети.
на ваши вопросы ответ да все пинговалась интернет был только на сервере.
avatar
Вы видимо не поставили пакет dnsmasq
avatar
Ставил! на сколько помню apt-get install dnsmasq в 2 строчки установка написал ОК и все.
Подскажите пожалуйста будет ли статья о безопасности и настройки правил пользования клиентам.
и еще вопрос какой программой лучше удаленно администратировать сервер?
Заранее спасибо!
avatar
Какие правила безопасности для клиентов, вас интересуют? Честно, не понял вопроса!
Я работаю через SSH из бесплатных Putty вам хватит за глаза, на ее основе есть ещё целая куча клиентов, тут как говорится-на вкус и цвет:
en.wikipedia.org/wiki/Comparison_of_SSH_clients
avatar
например запретить пользователю посещать сайты кроме 2-х нужных для работы или запретить качать с торентов, список запрещенных сайтов и т.д.,
avatar
Определенные сайты лучше резать на SQUID а чтобы торренты не работали, нужно рубить диапазоны портов.
avatar
Здравствуйте.
у меня стоит ubuntu 12.04-desctop не могу настроить на нем шлюз, причина следующая:
1. стоит router dir-320 (IP 192.168.1.1) настроенный на ppppoe, сам сервер, 2 сетевые карты на ubuntu 12.04-desctop (IP 192.168.1.100), и клиент с ОС Windows 7…
2. сетевая карта etho с адресом 192.168.1.100 смотрит в сторону dir-320 вроде настроил интернет есть
3. сетевая карта eth1 с адресом 192.168.0.1 смотрит в локальную сеть и связана с клиентом 192.168.0.2
4. на клиенте адреса от сервера получаю IP 192.168.0.2 mask 255.255.255.0 шлюз 192.168.0.1 и DNS 192.168.0.1, интернет есть (сразу стает в работу Skype и знак сети не показывает отсутствие интернета) но сайты не открывает :(
Когда дописываю на клиенте (Windows7) вручную DNS 192.168.1.1 все работает :)
Подскажите в чем может быть ошибки, в каком направлении их искать?
Заранее благодарен!!!
avatar
что говорит:
nslookup mail.ru
avatar
на клиенте 192.168.0.2 (Windows7)
Microsoft Windows [Version 6.1.7601]
© Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.
C:\Users\Денис>nslookup mail.ru
╤хЁтхЁ: UnKnown
Address: 192.168.0.1
*** UnKnown не удалось найти mail.ru: Query refused
C:\Users\Денис>
avatar
попробуйте попинговать 8.8.8.8
avatar
т.е. nslookup 8.8.8.8 или ping 8.8.8.8
avatar
C:\Users\Денис>nslookup 8.8.8.8
╤хЁтхЁ: UnKnown
Address: 192.168.0.1

*** UnKnown не удалось найти 8.8.8.8: Query refused

C:\Users\Денис>ping 8.8.8.8

Обмен пакетами с 8.8.8.8 по с 32 байтами данных:
Ответ от 8.8.8.8: число байт=32 время=75мс TTL=50
Ответ от 8.8.8.8: число байт=32 время=77мс TTL=50
Ответ от 8.8.8.8: число байт=32 время=75мс TTL=50
Ответ от 8.8.8.8: число байт=32 время=72мс TTL=50

Статистика Ping для 8.8.8.8:
Пакетов: отправлено = 4, получено = 4, потеряно = 0
(0% потерь)
Приблизительное время приема-передачи в мс:
Минимальное = 72мсек, Максимальное = 77 мсек, Среднее = 74 мсек

C:\Users\Денис>
avatar
Отлично!
Доступ в интернет есть, но не работает DNS, пакет dnsmasq установлен?
avatar
устанавливал dnsmasq а насчет настроек net.ipv4.ip_forward=1 сделано и
iptables -F
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o eth0 -j REJECT
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

тоже
avatar
я же и писал

на клиенте адреса от сервера получаю IP 192.168.0.2 mask 255.255.255.0 шлюз 192.168.0.1 и DNS 192.168.0.1, интернет есть (сразу стает в работу Skype и знак сети не показывает отсутствие интернета) но сайты не открывает :(
Когда дописываю на клиенте (Windows7) вручную DNS 192.168.1.1 все работает :)
avatar
Однако разрешение DNS имен не работает.
На самом шлюзе интернет работает?
avatar
Вы ведь сами написали:
на клиенте 192.168.0.2 (Windows7)
Microsoft Windows [Version 6.1.7601]

© Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.
C:\Users\Денис>nslookup mail.ru
╤хЁтхЁ: UnKnown
Address: 192.168.0.1
*** UnKnown не удалось найти mail.ru: Query refused
C:\Users\Денис>

Но интернет работает
avatar
Да со шлюзом все в норме интернет идет а вот ICQ и страницы не открывает, по Skype я разговариваю все в норе и если адрес а строе адресов пишу 77.88.21.3 (ya.ru) то открывает а если просто ya.ru то не открывает. Если прописываю в настройка сетевой карты вручную DNS 192.168.1.1 то все работает
avatar
Я вам и говорю, проблема в ДНС, раз не работает разрешение имен, проверяйте эти настройки.
avatar
посмотрите плиз где я мог ошибиться?

root@server-desktop:~# nano /etc/network/interfaces
auto lo
iface lo inet loopback

# Provider network
auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
dns-maneservers 192.168.1.1

# Local network
auto eth1
iface eth1 inet static
address 192.168.0.1
netmask 255.255.255.0

root@server-desktop:~# apt-get install dnsmasq
Чтение списков пакетов… Готово
Построение дерева зависимостей
Чтение информации о состоянии… Готово
Уже установлена самая новая версия dnsmasq.
обновлено 0, установлено 0 новых пакетов, для удаления отмечено 0 пакетов, и 4 пакетов не обновлено.

C:\Users\Денис>nslookup mail.ru
╤хЁтхЁ: UnKnown
Address: 192.168.0.1

*** UnKnown не удалось найти mail.ru: Query refused

C:\Users\Денис>

nano /etc/sysctl.conf
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

nano /etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will «exit 0» on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
iptables -F
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o eth0 -j REJECT
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

exit 0
avatar
ладно попробую переустановить с desktop на server
avatar
Честно, не знаю, вроди все правильно.
Попробуйте просто закопипастить как уменя!
Если до завтра проблему сами решить не сможете, стучитесь в аську, подключусь к вам через TeamViewer, думаю что сможем победить…
avatar
пишите в личку, если что.
avatar
все решилось полной переустановкой ubunut с desctop на server все пошло в работу
еще я настроил в файле sudo nano /etc/dnsmasq.conf строки смотрящие в LAN interface=eth1 и dhcp-range=192.168.100.50,192.168.100.250,12h после этого заработал DHCP и начал раздавать адреса…
благодарен вам что не остались равнодушны и откликнулись, спасибо!!!
avatar
Пожалуйста.
Рад что у вас все заработало!
avatar
Подскажите пожалуйста как настроить шлюз и Squid чтобы основная масса пользователей работала через проксю а пара компов работала напрямую минуя прокси и запреты?
avatar
Это весьма обширная темя получается.
Если в теории, то можно основную массу пользователей пустить через проксю- прописав ее в браузере, а другим ходить-чтобы запросы перенаправлялись через iptables
avatar
Здравствуйте.
Настроил все так как у Вас тут написано. Но не проходят пинги с клиентской машины на сервер. Сервер настраиваю в первый раз, т.е новичок в этом деле. Чтобы добавить более детальную информацию не знаю как скопировать информацию с консоли )
avatar
На какой сервер, на шлюз или на сервер в интернет?
avatar
на шлюз
avatar
ну если у вас по локалке пинги не ходят, какая может быть причина?! Проверяйте работоспособность локальной сети!
avatar
простите конечно. но что понимается под этим? как проверить эту работоспособность?
avatar
ну как минимум целостность проводов, подключение устройств и исправность коммутаторов.
avatar
поменял две сетевые карты, даже свитч ) а провода тоже исправны
avatar
но пинги-то не ходють?!
Вы никаких правил в iptables не создавали чтобы рубить ICMP пакеты?
avatar
абсолютно голый сервер. если так можно выразиться. первое что делаю это настраиваю шлюз. для чего это все и придумано было. но на первом же шаге такая вот неприятность
avatar
я вам в этой ситуации помочь не могу, тут я бессилен, а гадать можно очень долго
avatar
это все из-за моей невнимательности. все работает. пишу из локальной сети. наверно этот диалог можно удалить. спасибо. отнял ваше время только
avatar
вы решительный, но не внимательный… ;)
avatar
теперь бы squid настроить )
avatar
воспользуйтесь поиском по сайту.
avatar
Здравствуйте!
Как настроить убунту для использования 2х шлюзов от разных провайдеров?
На каждый шлюз ставить свою сетевую карту и для каждого клиента в настройках МАС прописываем использование конкретного шлюза?
avatar
Ну это если у вас оба шлюза видны в локальной сети, но зачастую так не бывает, обычно шлюз локальной сети подключается к двум провайдерам и уже сам определяет, куда перенаправлять пакеты.
Я давно собираюсь написать на эту тему статью, но что-то все руки не доходят.
avatar
ну да, это и хотел сказать…
компьютер-шлюз один и есть два провайдера и надо одним разрешить одного провайдера другим другого
и еще сверху чтоб работали все примочки DNS DHCP из других Ваших статей.
Свежая статья была бы актуальна, т.к. у многих есть резервные каналы интернета.
бегать с настройками роутеров и все собирать в кучу, чтоб еще и локальная сеть работала — грустно как-то, хочется в одном месте чтоб был.
спасибо за труды!!!
avatar
Честно сказать, я не знаю, когда статья будет готова, не так много времени сейчас.
Но думаю что она будет одной из 3х, которая у меня сейчас в планах.
avatar
ну примерное направление как делать подскажите?
можно же сделать как дополнение к этой статье, описать только нужные изменения?
avatar
нет, там все немного сложнее, посмотрите в поисковиках по запросу 2 ISP на одном шлюзе, ну или как-то так.
avatar
куда нужно включить этот вариант?
avatar
попробуйте, на вид выглядит нормально, а в детали я не вдавался…
avatar
Спасиб за статью,
Я б хотел задать пару вопросов:
Сейчас настроил apache на своем сервачке, настроил два виртуал хоста. В файле /etc/hosts прописал им такие алиасы

127.0.0.1 site1.dev
127.0.0.1 site2.dev

С клиентской машины в браузере ввожу site1.dev он не открывает (тож самое с site2). Я так понимаю мне следует Ставить Bind dns что бы у меня доступ к моим виртуал хостам был по алиясам, которые я прописал в /etc/hosts на сервере?
Буду рад любой информации, так как время поджимает.
avatar
Здравствуйте.
У вас полная каша в голове, нафига вы добавили записи в hosts на шлюзе?! Чтобы не поднимать bind, нужно добавлять запись в hosts на клиенте, а то вы добавили запись на loopback даже если клиент ее получит от сервера, то начнет искать это адрес у себя, локально.
ip_address_СЕРВЕРА site.dev
avatar
Теперь, нам необходимо добавить правила для маршрутизации пакетов:
nano /etc/rc.local
А почему не сохранить правила в что-то типа /etc/network/if-up.d/iptables.rules
и в /etc/network/interfaces в конце прописать
pre-up iptables-restore > /etc/network/if-up.d/iptables.rules?
Или это не правильно?
avatar
Пардон,
не pre-up iptables-restore > /etc/network/if-up.d/iptables.rules
_а pre-up iptables-restore < /etc/network/if-up.d/iptables.rules
avatar
на счет /etc/network/interfaces не уверен что можно.
в rc.local потому что они гарантированно отрабатывают, а вот если добавлять в фаерволл что-то подглючивало, т.е. после перезагрузки почему-то не применялись.
avatar
Здравствуйте!
Я настраивал шлюз (ubuntu 12.04) подобным образом, но у меня появилась проблема. Удалось ее максимально локализовать.
После настройки интерфейсов и разрешения форвардинга пакетов (net.ipv4.ip_forward=1 в /etc/sysctl.conf) машины в локалке получают доступ в интернет на максимальной скорости (8мбит/сек). А если выполнить команду: iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE, скорость подает почти в 2 раза.
Пробовал на виртуалках и на реальном железе.
Не подскажете, что это может быть?
avatar
Эта строка, в принципе, не может снижать скорость
avatar
Ну не знаю, может еще что-то влияет на ее работу.
Если выполнить iptables -t nat -F, то скорость сразу становится максимальной
avatar
как это вы такие глюки умудряетесь вылавливать?!
avatar
Здравствуйте!
Спасибо за интересную статью.
Подскажите пожалуйста, возможно ли применить её, если у меня стоит wlan0 и eth0?
Wlan0 имеет статический IP и подключен к интернету через роутер, а eth0 по замыслу должен раздавать интернет через маршрутизатор на локальные машины.
Возможно ли реализовать шлюз между wlan0 и eth0 просто подставив мои wlan0 и eth0 вместо eht0 и eht1 соответственно из Вашего примера?
avatar
Да именно так, настройте маршрутизацию между теми интерфейсами которые у вас есть все будет работать.
avatar
Здравствуйте!
Спасибо за статью… все заработало… но есть один вопрос…

Есть рабочая станция с Ubuntu 12.04
две сетевые карты eth0 и eth1

eth0 по DHCP получает адрес от провайдера 176.х.х.х
eth1 имеет статический IP 192.168.10.1

и к eth1 подключено проводом устройство с IP 192.168.10.200

это устройство подключается к удаленному серверу (IP 213.x.x.x) и создает VPN тунель получая IP 10.90.0.25… и уже сервер по этому адресу по протоколу udp 7000 порту должен договорится с устройством о передаче данных… устройство пингуется… телнет на 7000 порт подключается по IP 10.90.0.25… но данные не передаются

Может ли быть дело в настройках нашего шлюза на Ubuntu?.. что он зарезает udp протокол… или чего еще не разрешено..?

все настроил согласно этой статьи… интернет работает… да и OpenVPN вроде ж на 1194 udp стучится и работает… а вот почему данные не передаются не понятно… если на прямую подключить шнур к ноутбуку… то ноутбук все считывает… не понимаю какие могут быть ограничения по VPN (впервые сталкиваюс с линуксом… искал по гуглу как шлюз настроить)
avatar
Все должно работать нормально, никаких ограничений для трафика я не создавал, статья описывает базовый функционал, на нем все максимально открыто, а вот если нужно что-то не стандартное, то это уже настраивать самому -исходя из ваших задач.
может вы создавали какие-то правила на фаерволле? Просто другого объяснения вашей проблемы, не видя системы, я не вижу.
avatar
та нет… я точно не создаал… :)… да и нет там правил что-либо ограничивающих… скорей всего косяк либо с устройством, либо на сервере… благодарю за ответ… дело в том что я отвечаю за наладку связи с интернетом… а то устройство и сервер под юрисдикцией другого человека… и он начал наезджать на меня, что я не правильно что-то настроил… а так как я не уверен в том, что именно я настроил :)… то убедительно возражать не мог… ведь все работало VPN подключался связь по нужному порту была… единственное что у меня не вышло :) — это настроить DHCP… dhcp3-server после установки и настройки не запускался писало «unknow komannd» — удалил… а isc-dhcp-server вроде запускался но не работал… я так и не понял в чем проблема… ведь инструкции весьма простые…
avatar
смотреть логи, предварительно (для отладки) можно включить режим debug, тогда проблема отлавливается мин за 10.
avatar
Спасибо все описано четко и доступно, но возникла проблема.
с клиента шлюз пингуется, nslookup mail.ru тоже работает, но пинги других айпи адресов или сайтов несрабатывают, на шлюзе интернет есть. в чем может быть проблема?
avatar
Уже в принципе ненадо, проблема решена путем запуска диагностики неполадок на виндовс клиенте, что он там неполадил я непонял но на клиенте интернет заработал.
avatar
Вопрос по «домашнему заданию»)Пытаюсь разобраться в iptables.
iptables -F
очищаем таблицу filters
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
собственно, раздача интернета
iptables -A FORWARD -i eth0 -o eth0 -j REJECT
вот тут непонятно. Какие пакеты отбрасываются?
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
и тут тоже.

Что делают два последних правила?
avatar
Двойка вам, по домашке… ;)
iptables -A FORWARD -i eth0 -o eth0 -j REJECT

Запрещает подключения снаружи внутрь. Суть ясна?!
А по второму пункту
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

TCPMSS — устанавливает максимальный размер TCP-сегмента.
С точки зрения клиента, эта проблема выглядит так: пинги проходят нормально, но при попытке открыть какую-либо веб-страницу, браузер «подвисает». При этом с самого шлюза все работает нормально. В этом случае достаточно применить на шлюзе следующую команду
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

которая обеспечит автоматическую установку размера сегмента в TCP-заголовках SYN- и SYN,ACK-пакетов в соответствии с минимальным из известных нашему шлюзу значений MTU на пути следования пакета. Например, если пакет пришел с интерфейса eth0 (MTU 1500) и уходит через интерфейс ppp0 (MTU 1492), а суммарный размер заголовков сетевого итранспортного уровней составляет 40 байт (20 байт TCP и 20 байт IP), то целесообразно установить MSS равным 1452 байтам.

Помимо возможности автоматического выбора TCP MSS, вы можете задать необходимое значение и вручную, используя параметр --set-mss значение. Это бывает полезным в том случае, если вам заведомо известно, что дальше на маршруте встречаются участки с еще меньшим MTU, а пограничные сервера этих участков опять же блокируют ICMP destination unreachable/fragmentation needed.
avatar
Да, теперь все понятно.
Теперь такой вопрос.
Весь интернет трафик идет через прокси сервер (не локальный) — фишка провайдера.
Можно ли без Squid на сервере перенаправлять весь трафик туда? В команде REDIRECT есть только возможность задать порт. А сервер?
А то сейчас на каждом клиенте приходится прописывать адрес сервера прокси.
avatar
REDIRECT это для локальной машины, это правило не позволяет задать сервер получатель, только локальный порт.
Вам нужен DNAT, тогда запись принимает (примерно) следующий вид:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to IP_provider_proxy_server:3128

Таким образом можно заворачивать весь трафик, поступающий на определенный порт, на проксю провайдера. Остальные правила «запислите» сами.
avatar
не сработало так. Пришлось ставить squid и настраивать прозрачный прокси.
avatar
Добрый день!
Настроил шлюз по данной статье — все отлично работает.
Начал осваивать IPTABLES — столкнулся с проблемой.
Добавил к приведенным правилам правила для блокировки сайта вк всех клиентских ПК, кроме одного.
Все работает до первой перезагрузки клиентского компьютера. После перезагрузки в ВК получается зайти без проблем. Перезагружаю шлюз после влючения клиента — все опять работает как надо.

В rc.local прописано:
iptables -F
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o eth0 -j REJECT
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
iptables -A FORWARD -d 192.168.0.11 -s 'vk.com' -j ACCEPT
iptables -A FORWARD -s 'vk.com' -j DROP

Подскажите, в чем может быть дело?
avatar
Я ничего не понял-Вы создали правила они работают, после перезагрузки заходит без проблем, после перезагрузки шлюза-все работает как надо… Я мозг взорвал, но ничего не понял, в чем проблема-то если все нормально работает?!
avatar
Извиняюсь, на мне сказывается конец рабочего дня. Счас распишу)

Задача — запретить доступ к известной соцсети всем, кроме 192.168.0.11

1. Привожу файл rc.local к виду
#конфиг, который я взял с этого блога
iptables -F
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth0 -o eth0 -j REJECT
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
#ниже — мои попытки, которые касаются ВК
iptables -A FORWARD -d 192.168.0.11 -s 'vk.com' -j ACCEPT
iptables -A FORWARD -s 'vk.com' -j DROP

Перезагружаю шлюз.

2. После перезагрузки шлюза на клиентском ПК все работает как надо (т.е. vk.com не доступен), НО стоит мне перезагрузить этот клиенсткий комп (а шлюз в это время работает), и в контакт с него можно зайти без проблем.

3. Если я перезагружу шлюз (а клиент будет пока не перезагружен), то все работает как надо.

Иными словами, все перестаёт работать после после перезагрузки клиентских компов, и лечится перезагрузкой шлюза.
Не могу понять, почему так?
avatar
а IP адреса остаются прежние?
avatar
Адрес 192.162.0.11 закреплен за определенным компом и присваивается по мак-адресу через dhcp. Контакт на нем работает и до, и после перезагрузки.
Остальные — выдаются по dhcp, но все находятся в сети 192.168.0.0/24.

Раздача интернета пользователям идет нормально, по принципу, описанному в вашей статье.
PS: Что-то мне подсказывает, что сайты блокировать таким образом — топорно, но все таки…
avatar
Вообще-то вы правы, решение весьма топорное.
Я имел опыт блокирования VC.com через Iptables, от этой блокировкой еще куча сайтов перестала работать, видимо они как-то использовали «вконтактовское» API.
avatar
Надо настраивать сервер с 2 сетевыми (1 смотрит в инет 2 в локальную сеть), что бы станция видела инет? у меня станция дальше сервера ничего не пингует. сделал по схеме в статье.
avatar
Значит не все сделали как в статье, данный мануал проверен не единожды, и вопросы в комментариях поднимаются не первый раз, в результате выяснялось что что-то недоглядели…
Проверьте внимательно, просто я не могу вам помочь, не видя ничего.
avatar
После установки последних обновлений шлюз перестал работать. Сервер почему то не мог пинговать внешние адреса, а на клиентских машинах интернет постоянно отваливался, у клиентов на win7 при попытке найти проблему вылетало сообщение о неисправностях DNS сервера. Попробовал все сделать с нуля, пинги на сервере идут до установки пакета dnsmasq, ставлю все пропадает. Что-то не так скорей всего с пакетом dnsmasq.
Проблема была решена путем исправлений в файле /etc/init.d/dnsmasq, строчки «nameserver 127.0.0.1» на dns выданный провайдером, плюс к этому в файле dhcpd.conf в строке domain-name-servers тоже поставил dns провайдера. В любых других случаях шлюз по данному мануалу уже работать не будет. Может стоит изменить мануал. (мое решение возможно не самое правильное поэтому строго не судите)

За статью автору отдельное спасибо, до вчерашнего дня горя не знал, больше года сервер отработал!
avatar
Вот тут я с вам категорически не согласен.
Шлюз, настроенный по данной схеме, работает уже в 4х компаниях и жалоб пока не поступало, хотя обновления устанавливаются регулярно.
avatar
Ваше право соглашаться или нет, но если бы я вчера не сидел после работы до 23:00 в поисках решений своей проблемы, я бы не тратил свое время сегодня чтобы написать вам данное сообщение. И до вчерашнего дня я тоже мог отвечать тем у кого не работает, «да у меня сервак уже 14 месяцев работает и жалоб нет ». Посмотрим как пойдет дело дальше, если такая проблема есть значит скоро всплывет здесь и не раз.
Спасибо.
avatar
спокойнее пан…
avatar
Наличие проблемы не подвержено багтраком!
Если проблема имела место, то скорее всего будет исправлена со следующий обновлением.
avatar
Добрый день! Спасибо за статью, она мне очень помогла. Я в первый раз настраиваю шлюз, скажите пожалуйста, у меня стоит сервер, там ДНС И DHCP. Я на шлюзе тоже установила dnsmasq. Мне один ДНС удалить надо? И если да, то как это сделать на убунту? Я все сделала по вашим настройкам, локалка пингуется, а интернета нет. т.е когда дошла до проверки днс имен на пользовательском пк (у меня виндоус) днс разрешние не работает. Подскажите пожалуйста где я ошиблась.
avatar
Ничего удалять не нужно, просто сделайте с вашего ДНС сервера перенаправленные на ваш шлюз или сразу в интернет, например к серверам гугла 8.8.8.8
avatar
Здравствуйте!
В первую очередь спасибо за статью, всё работает интернет раздаёт. Но есть один нюанс. Что-то подобное встретил в комментариях у пользователя EternalTear, но решение так и не описано. Так вот.
Есть шлюз с Ubuntu 12.04. Внешний адрес статический, от провайдера. Локальный тоже статика. Интернет в локальной сети есть, мессенджеры и другие программы, требующие интернет соединения по различным портам, РАБОТАЮТ. Существует несколько удалённых VPN PPTP серверов, поднятых на D-Link DFL-860E. При подключении к любому из них сессия обрывается на этапе проверки пользователя и пароля, пишет ошибку 619 (Windows 7). При этом так же есть удалённый сервер с VPN PPTP на базе Windows Server 2008 к которому подключение происходит нормально, при тех же условиях. Если вместо шлюза с UBUNTU 12.04 ставлю любой другой маршрутизатор, подключение к D-Link-ам начинает работать. Никаких правил фильтрации я не создавал.
ВОПРОСЫ:
1.В чём может быть проблема?
2.Где на UBUNTU 12.04 смотреть логи для отладки? (с Linux мало знаком, нахожусь в процессе изучения)
avatar
После долгих поисков проблема решилась… подгрузил модуль ip_nat_pptp следующей командой — modprobe ip_nat_pptp. Теперь все ок! Так что не стоит лопатить iptables если не работает ВПН, сначала проверяйте наличие нужных модулей!
Проблема с ВПН состоит в том, что трасировщик (он же conntrack) не может корректно работать с GRE трафиком без необходимых модулей, несмотря на то что открыты порты и все такое. Вот как-то так…
avatar
Подскажите есть возможность подменить МАС адрес сетевой карты? И будет ли работать при этом нормально?
avatar
Конечно можно
Меняется следующим образом:
ifconfig eth0 hw ether 00:00:00:00:00:00

Где вместо нулей, поставить те данные которые вам нужны, работает до перезагрузки! Если требуется постоянная смена, то необходимо прописать скрипит, на запуск при старте системы.
Работать должно отлично, главное чтобы в одной подсети MAC адреса не повторялись
avatar
Можно поподробнее о том как прописать скрипт на постоянную смену. Куда прописывать и что?
avatar
в rc.local добавьте запись указанную мной выше, перед exit 0.
nano /etc/rc.local
avatar
Добрый день. Сделал все как там. У меня клиент машина Windows 7. Windows пингует Linux, но Linux не пингует Windows. Что не так? подскажите. если поставить клиент машину linux, то Linux сервер пингует linux клиент.
avatar
Ну если обратно пинги не проходят, возможно на Windows машине правила фаерволла блокируют ICMP пакеты, скорее всего у вас стоит профиль фаерволла — общественная сеть.
avatar
Спасибо за такую статья, очень помогла, только 2 вопроса
1) как сделать что бы в локалку ip выдавались автоматически а не прописывать каждому если клиентов много и они от шлюза разведены свитчами

«Присваиваем клиенту:
IP 192.168.10.2
.....»

2)как до этого чудо прокинуть правильно vpn что бы можно было с другого конца земли посмотреть если что то случится?
avatar
Как настроить dhcp нашёл тут на сайте вопрос только с vpn остался
avatar
Здравствуйте.
Думаю это подойдет howitmake.ru/blog/debian/23.html
avatar
Здравствуйте! Пытаюсь настроить по вашему руководству, но пинги с клиента не идут. На сервере стоит Ubuntu 10.04 Desktop
auto wlan0
iface eth0 inet dhcp
wpa-ssid *
wpa-psk *

auto wlan1
iface eth1 inet static
address 192.168.10.1
netmask 255.255.255.0

Сервер имеет ip 192.168.0.107, клиенту ставлю 192.168.10.2, но 192.168.10.1 с него не пингуется, в чем может быть проблема?
avatar
Ставьте северную ОС, с десктопом уже это проходили
avatar
Перенастроил подключение: сервер подключается к сети через Wi-Fi, к нему через провод подключается клиент. Настройки interfaces:
auto wlan0
iface wlan0 inet dhcp
auto eth0
iface eth0 inet static
address 192.168.100.1
netmask 255.255.255.0
Сервер с клиента пингуется, nslookup все показывает, но «без доступа к интернету».
avatar
nslookup отрабатывает потому что у вас работает DNSMASQ, он перенаправляет dns запросы, а пакеты не ходят потому что не настроена маршрутизация:
iptables -F
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
iptables -A FORWARD -i wlan0 -o wlan0 -j REJECT
iptables -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

Вот как-то так будет выглядеть.
avatar
Привет, настроил шлюз локалки по статье, однако, когда прописываю команду «nslookup mail.ru»
avatar
Здравствуйте.
Если вы отправляете DNS запрос с клиента, то он пытается обращаться сам к себе IP 127.0.0.1 а это loopback!
Если с сервера, то проверьте какой NDS сервер прописан у вас в настройках и работает у вас DNSMASQ? Т.е. служба должна слушать 53 порт
avatar
За одно попробуйте пропинговать 8.8.8.8 если запросы ходят нормально, то явная проблема с DNS
avatar
Здравствуй, все настройки были верны
Проблема оказалась в виртуальной машине, по какой-то причине ubuntu не мог активировать интерфейс «Eth1».
Если в настройках изменить на «Eth2» все работает.
avatar
Добрый вечер Максим, помогите пожалуйста решить вопрос
Никогда не настраивал сеть на линукс, а тут возникла срочная необходимость реоранизовать сеть, в общем:

Есть сервер на Ubuntu Server 14.04, в нем 4 сетевые карты. DHCP и локальные зоны в DNS для eth2 кое-как настроил, сетевые интерфейсы и подключения к провайдерам тоже, но возникла проблема с настройкой iptables т.к. раньше его не встречал

Провайдер на eth0 должен быть доступен для сети eth2 без ограничений

У провайдера на eth1 должен быть доступен для сети eth3 только один сайт со статичным ip 89.212.185.14

Связи между eth2 и сетями eth1 и eth3 не должно быть (ну или в идеале использовать для сети eth2 интерфейс eth1 в качестве резервного при недоступности его основного eth0)

Примерная схема сети
avatar
Здравствуйте.
Вам необходимо настроить маршрутизацию между этими подсетями
неплохой гайд по этому вот:
habrahabr.ru/post/30076/
А по поводу работы с iptables и маршрутизацией пакетов- просто отличная статья.
www.k-max.name/linux/iptables-v-primerax/
Готового решения не привожу т.к. без возможности тестирования, скорее всего, рекомендации будут не совсем рабочие (а я еще не достиг такой силы просветления чтобы писать правила и они сразу работали даже без тестирования). :)
avatar
Добрый день. Пробую создать шлюз по инструкции. Делаю все на виртуальных машинах. Вопрос такой: когда я пишу nslookup mail.ru, мне в ответ приходит
Пингуется в обе стороны нормально.
Пробовала писать dnsmasq на шлюзе, там пишут, что 53 порт занят. Мне нужно поменять порт? Если да, то как узнать на какой?
avatar
Здравствуйте.
Порт менять не нужно, 53й порт слушает слежба ДНС
чтобы узнать, кто слушает порт, есть команда
netstat -natp
avatar
Доброго времени суток.
Помогите юзверю настроить 2 карты для локалки
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0 eth1
iface eth0 inet static
    address 192.168.0.55
    netmask 255.255.255.0
#    network 192.168.0.0
#    broadcast 192.168.0.255
#    dns-nameservers 192.168.0.1 8.8.8.8
#    dns-search AMOYROO
#    post-up iptables-restore < /etc/iptables.up.rules
    gateway 192.168.0.1

# The secondary network interface
iface eth1 inet static
    address 172.17.39.55
    netmask 255.255.255.0
#    network 172.17.39.0
#    broadcast 172.17.39.255

Пробовал по всякому. По 192 пингует, а вот по 172 ни в какую
avatar
откуда и куда не идет пинги?
avatar
ubuntu-server не пигуется из подсетки 172.17.39.х и не пингует её саму… по 192.168.0.х всё в норме. Сам ubuntu сервер заведён в AD
avatar
А интерфейс вообще поднят?
avatar
Предположу, что не включен… и
sudo nano /etc/sysctl.conf
net.ipv4.ip_forward=1
sudo iptables -t nat -A POSTROUTING -o eth0 -s 172.17.39.0/24 -j MASQUERADE
P.S. и если вы уж указали все параметры — то можно было и не комментировать их, а если с ад интеграция лучше вообще указать днс ад и добавить маскарадинг в в авто правило которое у вас закомментировано
avatar
Да там даже до маскарадинга не дошло, пишут что не пингуется из подсети 172.17.39.х
avatar
Странно у меня точно так же запишет, когда маскарадинг не включен, специально запустил виртуалбокс и проверил, с компа который шлюз пингую сеть внутреннюю, с сервера 2012 не видит сеть, как только на шлюзе врубаю маскарадинг сразу пинги идут
avatar
А пардон упустил — сеть 172. не пингуется… извиняюсь
avatar
Текущий конфиг
# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
auto eth0 eth1
iface eth0 inet static
    address 192.168.0.55
    netmask 255.255.255.0
    network 192.168.0.0
    broadcast 192.168.0.255
    dns-nameservers 192.168.0.1 8.8.8.8
    dns-search AMOYROO
    gateway 192.168.0.1

# The secondary network interface
iface eth1 inet static
    address 172.17.39.55
    netmask 255.255.255.0
    network 172.17.39.0
    broadcast 172.17.39.255

sysctl.conf подправил
таблицы скорректировал
и всё равно вот так:
avatar
Я так понимаю, вы пытаетесь пинговать сеть 172.17.39.0 из сети 192.168.0.0, правильно?
avatar
У меня на всех компьютерах домена установлено два сетевых интерфейса на одной сетевой. Всё работает и по 192 и 172. А вот на серваке ubuntu 14.4 не хочет (поднимал 16.4 — работает)
Причём не пингуется как сам сервак, так и с сервака 172 подсеть не видны
avatar
Да… когда поднимал 16,4 — он не заведен в AD
avatar
Да причем тут AD, у вас пакеты не ходят!
ответьте на мой предыдущий вопрос, иначе я даже понять не могу, что у вас там за ситуация!
avatar
<blockquote=FreeUser>17 июня 2016, 11:16 — Причём не пингуется как сам сервак, так и с сервака 172 подсеть не видны
Я ведь ответил в предыдущем посте
avatar
Убедитесь что поднят сетевой интерфейс и есть подключение к нужной подсети.
avatar
Вы это имели в виду?
avatar
Будут еще предложения от сообщества? Помню, когда только решил попробовать Линукс — не волнуйтесь, если у Вас есть вопросы — Вам всегда помогут в сообществе линуксоидов. Ндя… Чем-то сравнение ФИДОнета с Интернетом вспомнилось
avatar
Фаерволл не блокирует ICMP пакеты?
Сеть подключена и настроена правильно?
Трудно заниматься гаданиями!
avatar
:-( Ну до чего я стал ленивый и тупой… Пишет ведь линь — нет скорости соединения.
Оказывается!!!, чтобы заработал второй сетевой интерфейс нужно было воткнуть второй сетевой кабель. Сцуко, долбодятел я.
ВСЕМ спасибо.
З.Ы. у меня все остальные машины с одной сетевой и двумя интерфейсами на них, а сервак с двумя картами и стоит в серверной неудобно. Это так для оправдания себя в своих глазах :-)
Есть что добавить? Регистрируйся и оставляй комментарии!