Янв 282010
 

В этой заметке будет рассказано как с помощью iptables настроить системы с Ubuntu и Debian для раздачи интернета другим компьютерам локальной сети. На простом примере будет показано как машину с двумя сетевыми интерфейсами (в один поступает интернет, из другого — «выходит») сделать шлюзом.

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

ifconfig

Она выдаст список работающих в данный момент сетевых интерфейсов. Среди них надо опознать те, что начинаются со слов «Link encap:Ethernet» — это интерфейсы сетевых карт. Как правило, это eth0 и eth1.
Теперь потребуется опознать в какой из них поступает интернет, а из какого «выходит». Проще всего это сделать по их ip-адресам.
Итак, допустим через eth0 вы получаете интернет (например через adsl-модем по протоколу ppp), а eth1 связывает вас с локальной сетью.
Если локальная сеть настроена через Network Manager, то мы рекомендуем прописать эти настройки непосредственно в системном конфигурационном файле сети:

sudo nano /etc/network/interfaces

Здесь исправьте настройки вашего сетевого интерфейса, подключенного к локальной сети (в нашем случае eth1), соответствующим образом:

auto eth1
iface eth1 inet static
address 192.168.0.10
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255

Значение address — это айпи вашей машины в локальной сети, по этому адресу собственно и будет располагаться шлюз.
Значение netmask — в локальных сетях для этого диапазона чаще всего такая. Для других диапазонов можно вычислить здесь.
Значения network и broadcast будут зависеть от вашего адреса. То есть, если ваш локальный ip — 10.0.0.10, то network и broadcast будут 10.0.0.0 и 10.255.255.255 соответственно.

Либо, это можно проделать всего одной командой:

sudo ifconfig eth1 192.168.0.10

Эта команда самостоятельно настроит вашу сетевую карту eth1 на использование статичного айпи-адреса, и самостоятельно пропишет описанные выше настройки в файл /etc/network/interfaces

В любом случае, после этих изменений перезапустите networking:

sudo /etc/init.d/networking restart

Командой:

ifconfig

проверьте, что изменения вступили в силу и все работает.

Теперь осталось дело за малым. В случае если вы уже пытались настроить вашу систему шлюзом, но у вас не получилось или по каким-то другим причинам вы желаете обнулить все настройки файрвола iptables, то это можно сделать следующими командами:

iptables --flush
iptables --table nat --flush
iptables --delete-chain
iptables --table nat --delete-chain

Если прямой необходимости в сбросе настроек iptables нет, то лучше этого не делать.

Следующие команды настроят ваш iptables для NAT-трансляции (NAT, Network Address Translation — «преобразование сетевых адресов») через Ubuntu-шлюз:

sudo iptables -A FORWARD -i eth0 -o eth1 -s 192.168.0.0/24 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A POSTROUTING -t nat -j MASQUERADE

Если необходимые вам сетевые интерфейсы отличаются от eth0 и eth1, то просто измените первую строку соответствующим образом.
Если ваша локальная сеть находится вне диапазона 192.168.x.x, то маску подсети для указания в первой строке вы сможете легко вычислить через сервис Network Calculators.

Теперь для конфигурации gateway’я для роутинга между двумя интерфейсами необходимо включить IP-форвардинг командой:

sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"

И последний штрих: надо отредактировать файл sysctl.conf:

sudo nano /etc/sysctl.conf

Добавьте в него вот эти две строки для активации роутинга:

net.ipv4.conf.default.forwarding=1
net.ipv4.conf.all.forwarding=1

После этого ваш интернет-шлюз готов к работе. Можете настраивать клиентские машины. На нашем примере для них gateway будет 192.168.0.10

Если все внесенные вами изменения работают корректно и вы желаете внести эти настройки в автозагрузку (а именно, вышеприведенные настройки iptables теряют активность после перезагрузки системы), то сохраните нынешнюю рабочую конфигурацию iptables в файл командой:

sudo sh -c "iptables-save > /etc/iptables.up.rules"

После этого в сам файл сетевых настроек /etc/network/interfaces (sudo nano /etc/network/interfaces) к параметрам вашего сетевого интерфейса, например, из которого к вам поступает интернет (в нашем случае — это eth0) добавьте строку:

pre-up iptables-restore < /etc/iptables.up.rules

То есть оно станет примерно такого вида:

auto eth0
iface eth0 inet manual
pre-up iptables-restore < /etc/iptables.up.rules

Только не меняйте значения в строке iface, просто добавьте указанную строку последней в разделе auto eth0 (ну или какого-то другого сетевого интерфейса). После этого при перезагрузке сохраненные настройки iptables будут подниматься автоматически.

Если вы хотите добавить к этому автоматическую раздачу адресов (dhcp) и прокси, то воспользуйтесь для этого, например, вот этой инструкцией.

  123 Ответов в “Настройка Ubuntu сетевым шлюзом для раздачи интернета в локальную сеть”

  1. Андрей: не могу ответить на ваш вопрос, недостаточно данных. Какую аутентификацию вы имеете ввиду?
    Если интернет поступает и работает на сервере через eth0, то рекомендую обнулить таблицы iptables и попробовать еще раз более внимательно — должно работать.

  2. iptables я обнулял и делал все по шагово раза 4. Скажите пожалуйста а не может ли быть проблема в том что адрес eth0 (инет) у меня статический и не корректно отрабатывает вот эта строчка:
    sudo iptables -A POSTROUTING -t nat -j MASQUERADE
    и если это так то что нужно прописать чтобы работало со статическим внешним ip?

  3. Организовал шлюз на машине Linux Mint 9 Росинка на базе Ubuntu 10.04.
    настроил по вашим рекомендациям. Интернет раздает до перезагрузки системы. Дошел до места sudo sh -c «iptables-save > /etc/iptables.up.rules»
    в файле /etc/network/interfaces пробую прописывать для автозагрузки, В этом файле по уммолчанию прописана петля
    auto lo
    iface lo inet loopback
    дописываю
    auto eth1
    iface eth1 inet manual
    pre-up iptables-restore < /etc/iptables.up.rules
    но после загрузки все сетевые карты отключаются совсем
    Может в Росинки не в это файл надо прописывать
    Если можно то ещё для меня как правильно организовать автозапуск в LM9 Росинкa

  4. Николай, ответ на ваш вопрос находится в коментарии 89 к этому посту.

  5. Здравствуйте. Сделал все по вышеописанному и максимум, чего добился — это работоспособность ICQ с машин в локальной сети. Больше ничего не открывается. В чем проблема? Спасибо.

  6. ERT, скорее всего у вас некорректно указаны или не указаны вовсе DNS.

  7. Настроил по вашей инструкции,но на ноуте в вин 7 пропадает нет.Что может быть за ошибка?

  8. Dima, недостаточно данных чтобы ответить на ваш вопрос.
    Подробно опишите вашу проблему, что проанализировать и найти причины.

  9. Здравствуйте.

    Есть локальная сеть через которую выхожу в интернет. Интерфейс eth0. Хочу сделать AP wi-fi которая создаёт другую сеть (домашнюю)
    Хочу выдавать всем устройствам wi-fi статический IP и подключатся к точке доступа, через которую выходить в интернет.

    eth0 настраиваю так:


    ifconfig eth0 192.168.0.185 netmask 255.255.248.0 hw ether 00:25:22:39:ae:a5
    route add default gw 192.168.0.30

    Добавляю в /etc/resolv.conf dns:

    echo "nameserver 195.95.139.18" >> /etc/resolv.conf

    Интернет появляется.

    Есть интерфейс wi-fi wlan0.
    Интерфейс wlan0 настраиваю как точку доступа при помощи hostapd

    /etc/hostapd/hostapd.conf

    interface=wlan0
    driver=nl80211
    ssid=MyAp
    country_code=RU
    hw_mode=g
    channel=5

    macaddr_acl=1
    accept_mac_file=/etc/hostapd/hostapd.accept

    после поднятия hostapd, ifconfig выдаёт:


    eth0 Link encap:Ethernet HWaddr 00:25:22:39:ae:a5
    inet addr:192.168.0.185 Bcast:192.168.7.255 Mask:255.255.248.0
    inet6 addr: fe80::21b:38ff:fecb:f33a/64 Scope:Link
    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
    RX packets:2585536 errors:1 dropped:102 overruns:0 frame:1
    TX packets:2702510 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:1000
    RX bytes:354029473 (354.0 MB) TX bytes:2920203702 (2.9 GB)
    Interrupt:42 Base address:0x2000

    lo Link encap:Локальная петля (Loopback)
    inet addr:127.0.0.1 Mask:255.0.0.0
    inet6 addr: ::1/128 Scope:Host
    UP LOOPBACK RUNNING MTU:16436 Metric:1
    RX packets:407538 errors:0 dropped:0 overruns:0 frame:0
    TX packets:407538 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:0
    RX bytes:13450614 (13.4 MB) TX bytes:13450614 (13.4 MB)

    mon.wlan0 Link encap:UNSPEC HWaddr 00-1F-3A-0D-8C-B1-30-30-00-00-00-00-00-00-00-00
    UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
    RX packets:22 errors:0 dropped:0 overruns:0 frame:0
    TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:1000
    RX bytes:1544 (1.5 KB) TX bytes:0 (0.0 B)

    wlan0 Link encap:Ethernet HWaddr 00:1f:3a:0d:8c:b1
    inet6 addr: fe80::21f:3aff:fe0d:8cb1/64 Scope:Link
    UP BROADCAST MULTICAST MTU:1500 Metric:1
    RX packets:137601 errors:0 dropped:0 overruns:0 frame:0
    TX packets:199787 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:1000
    RX bytes:13853704 (13.8 MB) TX bytes:242239576 (242.2 MB)

    Назначаю интерфейсу wlan0 ip-адрес:


    ifconfig wlan0 10.0.0.1/24

    После чего делаю настройки iptables:


    iptables -A FORWARD -i eth0 -o wlan0 -s 10.0.0.0/24 -m conntrack --ctstate NEW -j ACCEPT
    iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
    iptables -A POSTROUTING -t nat -j MASQUERADE

    Далее на другом ПК настраиваю сеть wi-fi:
    ip:10.0.0.2/24
    gw:10.0.0.1
    dns: 195.95.139.18

    К точке доступа подключается. Пинг на 10.0.0.1 и 192.168.0.185 идёт. Но интернета нет…

    Может что-то упустил.
    Что может быть не так?

  10. Здравствуйте, Руслан.

    Рабочее руководство по созданию точки доступа для раздачи интернета в Debian/Ubuntu читайте вот здесь:

    http://gettoknowlinux.blogspot.com/2011/06/kak-razdat-internet-cherez-wi-fi-v.html

  11. «Либо, это можно проделать всего одной командой:
    sudo ifconfig eth1 192.168.0.10
    Эта команда самостоятельно настроит вашу сетевую карту eth1 на использование статичного айпи-адреса, и самостоятельно пропишет описанные выше настройки в файл /etc/network/interfaces»

    Эта команда ничего в этот файл не пишет. Она присваивает IP только до перезагрузки.

  12. Спасибо все заработало, неплохо еще бы добавить какой нибудь кэширующий dns-сервер. У меня без dnsmasq не захотел денеэсить. Там всей настройки: sudo apt-get install dnsmasq

  13. Ваще верняк! Спасибо за инструкцию!

  14. А я вот тут http://school-adminlinux.blogspot.com/ прочитал мне помогло пока работает

  15. У меня проблема….. помогите….. Упал шлюз. Все дело в том что я инет могу раздать локальным машинам и виндой, но, есть один момент! У меня два входящих канала, один зашифрованный другой нет, их надо преобразовать в один. И раздавать по одному кабелю!

  16. Алексей, если хотите чтобы вам помогли — то более конкретно формулируйте проблему. Из вашего описания не ясно каким ПО вы пользуетесь и в чём конкретно состоит проблема.

  17. здравствуйте… настроил всё по мануалу.. вроде получилось но проблема такова: сетевая карта (етх1) смотит в локальную сеть, сетевая карта (етх0) смотрит на провайдера… при подключении всех проводов спустя минуты две появляеца локалка (проверено методом пинга) а вот инет никак не появляеца (на серваке!!!) хотя я пингую до точки доступа и ДНС все видит… в чом может быть трабл???… помогите…. до этого был такой трабл лечился методом тыка на сетевое подключение «в трее»….изначально ставил дистрибутив убунту 10,04, но он попросил обновления до 11 версии… после обновления эта менюшка «в трее» пропала… теперь я не знаю куда ткнуть штоп подключение произошло!!!!…. ПОМОГИТЕ….

  18. Добрый день, настроил как написано выше, всё работает, у всех есть инет, но надо пробросить порт для вэб сервера, воспользовавшись этой статьёй http://oss-it.ru/217 получилось что с интернета обращаясь на мой ip (естественно внешний) попадают на вэб сервер, но с локальной сети если я обращаюсь на внешний ip не пропускает!

  19. Добрый день. Подскажите пожалуйста у меня вот такая проблема прочитал вашу тему спасибо. Но у меня не получилось немного по поподробне сервер ubuntu подключен к создан домен вот его настройки
    auto eth0 (от сюда я получаю инет)
    iface eth0 inet static
    adress 192.168.101.247
    netmask 255.255.255.0
    gateway 192.168.101.1

    auto eth1 (а здесь его нету)
    iface eth1 inet static
    adress 10.10.8.1
    netmask 255.255.255.0
    network 10.10.8.0
    broadcast 10.10.8.254

    Подскажите что я не так сделал?

  20. Автору большое уважение. Прекрасная статья. Все получилось со второго раза (первый раз не сбрасывал iptable, не прописал одну строчку и сделал одну ошибку). Главное выполнять все по инструкции. Хочу дать только пару замечаний по статье:
    1) Значения network и broadcast будут зависеть от вашего адреса. То есть, если ваш локальный ip — 10.0.0.10, то network и broadcast будут 10.0.0.0 и 10.255.255.255 соответственно. — тут, помоему ошибка. должно быть так: то network и broadcast будут 10.0.0.0 и 10.0.0.255
    2) Хотелось бы увидеть описание блок:
    sudo iptables -A FORWARD -i eth0 -o eth1 -s 192.168.0.0/24 -m conntrack —ctstate NEW -j ACCEPT
    sudo iptables -A FORWARD -m conntrack —ctstate ESTABLISHED,RELATED -j ACCEPT
    sudo iptables -A POSTROUTING -t nat -j MASQUERADE
    А то страшно выполнять то, чего вообще не понятно.

  21. можно мне спросить помощи у общественности.
    Ситуация в офисе такая. Входит кабель инета на вай-фай роутер, клиент Убунту 12.04 получает через юсб тот самый инет, при этом его сетевая не задействована вовсе. Рядом к этому клиенту ставят другой комп на той же самой Убунте, но соединяют оба компа через обжатый Лан-провод. Оба клиента получают дшсп в автомате, оба работают с сервером через Реммину (обязательное условие)
    Не могу раздать интернет с клиента 1 (ЮСБ вай-фай интернет получает, через свою сетевую должен отдать клиенту 2).
    Вводные данные такие:
    клиент1 — 192,168,0,109, маска 255,255,255,0 шлюз 192,168,1,1, броадкаст 192,168,0,255, днс 77,121,244,40 на его сетевой ставлю такие параметры вручную — 192,168,1,1, маска 255,255,255,0
    клиент 2 -лан 192,168,1,2, маска 255,255,255,0, шлюз 192,168,1,1, днс 192,168,1,1
    спасибо за помощь

  22. в /etc/network/interface описана только петля. о eth0 и eth1 там не слова, как настроить автозагрузку параметров?

  23. Большое спасибо. Действительно все получилось. Правда с моими ip адресами не работает, но если использовать ip адреса указанные в примере — все получается. Пойду искать косяк в своих айпишках. Спасибо за статью!

 Оставить комментарий

Вы можете использовать эти HTML теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)