Интернет шлюз на Linux Debian/Ubuntu

Linux - Сети

Интернет шлюз на Linux Debian/Ubuntu

Задача:

1. Разрешить пользователям локальной сети выходить в интернет с помощью шлюза на Linux Debian/Ubuntu без особых ограничений.

Дано: 1. Компьютер с двумя сетевыми картами. 2. Дистрибутив Debian или Ubuntu Linux. (я бы всё-таки советовал для сервера Debian) 3. Прямые руки и свежая голова.

Итак, приступаем!

Для начала перво-наперво установим Linux на компьютер, указав при этом все настройки сети. Я рекомендую устанавливать Debian, и в момент запроса у нас выбора необходимых пакетов, установим только основные компоненты системы и openssh-server. Всё, больше для работы шлюза на linux нам ничего не надо. Никаких графических оболочек. Устанавливать будем напрямую, а подключаться потом можно по ssh для управления удалённым сервером, или если не подключены клавиатура, мышь и монитор. Если вы вообще никогда не устанавливали  Linux, и понятия не имеете, как установить linux на компьютер, просмотрите вот эту статью. Установка Debian на компьютер немногим отличается от установки Ubuntu.

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

1. Пропускать сетевые пакеты через себя. (FORWARD)

2. Транслировать сетевые адреса (преобразовать адреса локальной сети в 1 внешний адрес, под которым пользователь будет выходит в сеть). Иными словами шлюз (gateway) пускает через себя пользователей локальной сети под своим адресом. Можете назвать это программным роутером или как вам будет угодно. Служба эта называется NAT (Network Address Translation).

Но обо всём по порядку. Для начала настроим сетевые интерфейсы. Настройки локальной сети берёте у себя, настройки интернет - у провайдера. Если выход в интернет не по ip-авторизации, а через xDSL соединение, то используйте утилиту pppoeconf.

Представим, что у нас есть 2 настроенных сетевых интерфейса. Это локальный (eth0) и внешний (eth1). Интернет на шлюзе есть, яндекс пингуется, гугл туда же. Практически последняя задача - заставить наш шлюз на Linux пускать всех в инет через себя. Вот здесь хочу отметить, что на linux есть свой файрволл, и называется он iptables. По умолчанию iptables работает таким образом - "К себе никого  не пущу, кроме как по тем соединениям, что были инициированы мной!" Но так не пойдёт ) Поэтому настраиваем iptables:

Я рекомендую иметь все настройки iptables в отдельном файле, который при необходимости можно будет отредактировать. Собственно файлик этот и будет рулить.

Поехали:

1. Создаем файл с именем firewall.sh в папке /etc/init.d/

# touch /etc/init.d/firewall.sh

2. Даём права на запуск

# chmod 755 /etc/init.d/firewall.sh

3. Добавляем наш скрипт в автозагрузку. На всякий случай :)

# update-rc.d firewall.sh defaults

4. Ну и, собственно, редактируем наш скрипт.

# nano /etc/init.d/firewall.sh

Дадим ядру понять, что это реально .sh скрипт

# !/bin/sh (вот здесь прямо так вместе с символом # и пишем внутри! Это тот тип комментария, который нужен ядру)

Включим форвардинг в линукс.

echo 1 > /proc/sys/net/ipv4/ip_forward (1 - вкл, 0- выкл :))

Сбросим все настройки входящих, исходящих и форварда. Это поможет нам избавится от "неправильных" правил iptables, набранных в консоли. Просто запустим скрипт, и правила обновятся:

iptables -F INPUT

iptables -F OUTPUT

iptables -F FORWARD

Политика по умолчанию - форвард разрешён:

iptables -P FORWARD ACCEPT

Добавим новое правило постмаршрутизации в сетевую таблицу "nat". Логика правила такая: С источника "локальная сеть"  исходящие пакеты через внешний интерфейс должны "натиться" (передваться как один внешний), но мы будем маскарадить. Маскарад (MASQURADE)  даёт возможность корректной работы с динамическим внешним ip адресом. iptables -A (новое правило) POSTROUTING (постмаршрутизации) -t (таблицы...) nat (...NAT) -s (source - с источника) 192.168.1.0/24 (всей локальной сети) -o (output - через исходящий...) eth1 (...интерфейс eth1) -j (job - работа (что делать?)) MASQUERADE (маскарадить). Т.е. получается такое правило iptables:

iptables -A POSTROUTING -t nat -s 192.168.1.0/24 -o eth1 -j MASQUERADE

Собственно всё. Можно ещё добавить в конец скрипта что-то вроде оповещения, которое будет говорить о том, что скрипт сработал:

echo firewall rules accepted

Сохраняем и закрываем. (Если редактировали через nano, как в этой статье, то жмём ctrl+o (сохранить) ctrl+x (закрыть)).

Теперь запустим наш скрипт

/etc/init.d/firewall.sh

Увидели сообщение "firewall rules accepted"? Никаких ошибок не было? Поздравляю! Шлюз на linux готов! Теперь все компьютеры из вашей локальной сети смогут ходить в интернет, правда совсем без каких либо ограничений. И да, если в вашей сети нет DNS сервера, то в настройках клиента нужно указать DNS сервера провайдера или например, DNS сервер Google ;) (адрес легко запомнить - 8.8.8.8)

Ну и, как всегда, я надеюсь, что данная статья помогла вам настроить шлюз на linux debian/ubuntu. Удачи вам в ваших начинаниях!

Вы всегда можете оставить в комментариях свои замечания и пожелания по доработке, изменению или исправлению статьи. Мы работаем для вас!

Поделится с другими

Комментарии  

 
+5 #1 valeriy 21.04.2011 12:27
Отличная статья! Написана доступным языком, не требует никакого излишнего напряжения.
Спасибо.
Цитировать
 
 
+4 #2 dmitriy 27.04.2011 16:36
10 балов из 10
огромное спасибо - очень много времени спас мне от курения мануалов
Цитировать
 
 
+2 #3 Лару 29.04.2011 16:04
Короткая статья, давно мучаюсь с инетом, не могу расшарить с убунту на хрюшу, вышесказанное сработает?
Цитировать
 
 
+2 #4 Squ1sh 29.04.2011 16:39
Да, конечно. У меня таким образом раздаётся с нетбука (Ubuntu 10.10, USB-3G modem). От нетбука идёт кабель к компу (XP, Ubuntu). Всё прекрасно работает. На ХР надо будет в качестве шлюза указать ip-адрес Ubuntu, а в качестве DNS серверов то, что выдано провайдером, либо любой другой (например 8.8.8.8 - DNS сервер гугла). Если ещё возникнут вопросы - пишите! Обязательно ответим!
Цитировать
 
 
0 #5 alozovskoy 29.04.2011 18:32
В строке
iptables - P FORWARD ACCEPT

лишний пробел перед P, правильно так:

iptables -P FORWARD ACCEPT

Спасибо, отличная статья!!
Цитировать
 
 
0 #6 ArT666 30.04.2011 05:24
2alozovskoy
Благодарим
Цитировать
 
 
-1 #7 Squ1sh 30.04.2011 06:20
Странно, я не вижу пробела. Art666, ты правил? )
Цитировать
 
 
+2 #8 ArT666 30.04.2011 06:31
Да, я поправил уже ;)
Цитировать
 
 
+6 #9 Forgevalt 12.08.2011 04:35
Дай бог автору здоровья и жену красавицу!
Цитировать
 
 
-8 #10 gavru 25.08.2011 04:29
Есть вариант немного проще http://traffpro.ru позволяет иметь два провайдера и более, резервировать каналы, аварийно переключать при падении одно из них и так далее. Плюс много вкусностей по учёту и детализации, встроенный шейпер, файрвол, контроль, и так далее.
Цитировать
 

Добавить комментарий



Обновить

Рейтинг пользователей: / 6
ХудшийЛучший 



Кто онлайн?

  • MoeksNami

Donate

Помочь проекту Сделать пожертвование

Реклама



Мы в twitter

Последние комментарии

  • Ну да, для дома или пары клиентов рублей 9 выкину...
    By a148ru
  • Бизнес в интернете - ровно как и заработок в интер...
    By culbipa
  • непонял
    By DragoN
  • ДЕЛАЛ ПОЛНОСТЬЮ ПО МАНУАЛУ - В /BOOT НИ ЧЕ КРОМЕ G...
    By romka
  • Сам вспомнил, что днс спокойно можно клиентам раз...
    By alex2012
  • Великолепный сайт, читаю не отрываясь уже третий ч...
    By biz87
  • 2 Петр становитесь соавтором! :-)
    By Squ1sh
  • Так здорово наблюдать, как кто-то пытается разобра...
    By Петр
линуксы.рф

RamblerTop100