Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: [FAQ] Расшариваем интернет на второй компьютер  (Прочитано 177499 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Гарри Кашпировский

  • Автор темы
  • Гость
Эта статья в wiki
Internet Connection Sharing (ICS) in Ubuntu. Или как дать интернет второму компу.
На написание этой заметки меня подвигли многочисленные темы новичков, то и дело возникающих с подобным вопросом. В ней будет рассмотрена настройка сервера и необходимых служб, для простейшей реализации ICS в Ubuntu Linux.
Рассмотрим простой пример, когда второму комьютеру необходимо предоставить ресурсы интернета.

ВНИМАНИЕ! Все дальнейшие действия будут выполняться из под суперпользователя, при помощи консоли, поэтому нужно быть внимательным при выполнении тех или иных команд.

Итак, у нас есть компьютер с двумя сетевыми картами под управлением Ubuntu Linux - СЕРВЕР.


I. Настройка сетевых интерфейсов.
Так как данная тема весьма обширна и явно не уместится в этом how-to, мы рассмотрим только настройку интерфейса, который будет отдавать интернет на второй компьютер (КЛИЕНТ). Посмотреть доступные интерфейсы можно командой ifconfig -a. Условимся, что
eth0 - сконфигурирован и получает интернет от провайдера
eth1 - отдаёт интернет КЛИЕНТУ.
Что необходимо сделать:
1. Сделать автозагрузку правил iptables, с помощью скрипта iptables-restore. Другой вариант, так называемый "Lazy Mode" описан тут.
2. Настроить интерфейс получающий интернет.
3. Настроить интерфейс отдающий интернет.
Для наглядности, мы будем использовать пример с gedit, но в системах без графического интерфейса, следует использовать CLI-редакторы, например vi, vim, nano или mc.
Открываем терминал: Приложения - Стандартные - Терминал.
Цитировать
sudo -s
cp /etc/network/interfaces /etc/network/interfaces.bak
gedit /etc/network/interfaces
/etc/network/interfaces
Код: Bash
  1. auto lo
  2. iface lo inet loopback
  3.      post-up iptables-restore </etc/iptables.conf
  4. auto eth0
  5. iface eth0 inet dhcp
  6. auto eth1
  7. iface eth1 inet static
  8.      address 192.168.0.1
  9.      netmask 255.255.255.0
Сохраняем, закрываем, перезапускаем сетевой интерфейс, смотрящий в локальную сеть КЛИЕНТА.
Цитировать
ifdown eth1
ifup eth1
Настройка интерфейса закончена.


II. Настройка правил iptables и параметров ядра.
Эта тема также требует отдельного рассмотрения, поэтому нам нужно только самое необходимое.
Что необходимо сделать:
1. Разрешить пакетам бегать между интерфейсами. Это команда выполняется однажды, дальше, при необходимости, изменяются только правила iptables.
2. Разрешить NAT домашней сети, скофигурировав правила iptables.
3. Дефрагментировать  tcp-пакеты, если размер MTU разный на интерфейсах.
4. Сохранить правила iptables с помощью скрипта iptables-save.
Открываем терминал: Приложения - Стандартные - Терминал.
Цитировать
sudo -s
echo 'net.ipv4.ip_forward = 1' >>/etc/sysctl.conf; sysctl -p
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 ! -d 192.168.0.0/24 -j MASQUERADE
iptables -t mangle -A FORWARD -p tcp -m tcp --tcp-flags RST,SYN SYN -j TCPMSS --clamp-mss-to-pmtu
iptables-save >/etc/iptables.conf
Настройка таблиц iptables и параметров ядра завершена.
Впринципе на этом можно было бы и закончить, если бы не одно НО! КЛИЕНТ, не сможет автоматически получить IP адрес и IP сервера DNS от СЕРВЕРА. Любителям ручных настроек, на КЛИЕНТЕ указать:
IP адрес: 192.168.0.2
Маску подсети: 255.255.255.0
Шлюз: 192.168.0.1
DNS: DNS-провайдера
и  следующий пункт можно не читать ;)



III. Настройка DNS и DHCP-сервера.
Если Вы используете в качестве DHCP - dhcp3-server (DHCP 3.0 или DHCP 4.0), а в качестве DNS-сервера - BIND9, обратитесь к руководствам этих приложений для их конфигурирования.
Тут будет рассмотрена настройка DNS-прокси и DHCP-сервера, на примере dnsmasq, который используется в большинстве домашних маршрутизаторах.
Открываем терминал: Приложения - Стандартные - Терминал.
Цитировать

sudo -s
apt-get install dnsmasq
cp /etc/dnsmasq.conf /etc/dnsmasq.conf.bak
gedit /etc/dnsmasq.conf
/etc/dnsmasq.conf
Код: Bash
  1. # Укажем интерфейс, который будет слушать dnsmasq
  2. interface=eth1
  3. # Укажем адрес, на котором будет находиться dnsmasq
  4. listen-address=192.168.0.1
  5. # Укажем dnsmaq слушать только интерфейсы
  6. bind-interfaces
  7. # Укажем локальный домен, для нашей домашней сети, это не обязятельно
  8. domain=linux.lan
  9. # Укажем DHCP-серверу диапазон выдаваемых адресов, длинную маску и время их аренды
  10. dhcp-range=192.168.0.2,192.168.0.254,255.255.255.0,24h
  11. # Укажем DHCP-серверу маршрут по умолчанию (default route) выдаваемом клиентам,
  12. # в нашем случае это адрес интерфейса eth1
  13. dhcp-option=3,192.168.0.1
  14. # По идее можно указать адреса DNS, выдаваемых DHCP-сервером принудительно,
  15. # если что-то не устраивает в dnsmasq,  хотя Клиент и так по умолчанию
  16. # получает адрес DNS=IP-eth1
  17. # dhcp-option=6,ip-dns1,ip-dns2,ip-dnsN
Сохраняем. Перезапускаем dnsmasq
Цитировать
service dnsmasq restart

Настройка ISC на Ubuntu завершена.

На всякий случай можно перезагрузить СЕРВЕР, что бы убедиться в работоспособности этой схемы после перезагрузки, связанной с обновлением ядра и другими причинами.


Полезные ссылки:
Руководство по iptables
Руководство sysctl
Руководство interfaces
Руководство dnsmasq
Таблица соответствия масок подсетей
IP-калькулятор
Обжим витой пары в RJ-45

(Нажмите, чтобы показать/скрыть)
« Последнее редактирование: 23 Февраль 2014, 10:40:11 от Сперанский »

Оффлайн MaratSh

  • Участник
  • *
  • Сообщений: 204
  • Всё пройдёт...
    • Просмотр профиля
Темя конечно баян, но раз уж захотелось об этом написать, мои замечания.

1. Раздел: "Настройка DNS и DHCP-сервера." лучше пока вообще убрать. Если делать всё по минимуму, достаточно прописать в сетевых настройках сервера и клиентов DNS-сервер провайдера, или гугловский 8.8.8.8

2. Тема настройки сетевых интерфейсов вообще не раскрыта. Не сказано даже какой IP-задать клиенту...
Настройки eth0 актуальны только для тех, у кого подключение поднимается само c DHCP (через ADSL-модем настроенный роутером или прямое кабельное подключение), а остальные (PPPoE, VPN и т.д.) идут лесом и задают 100500 вопросов...

3. В iptables тоже лучше всё максимально упростить, вместо:
Цитировать
ptables -t nat -A POSTROUTING -s 192.168.0.0/24 ! -d 192.168.0.0/24 -j MASQUERADE
iptables -t mangle -A FORWARD -p tcp -m tcp --tcp-flags RST,SYN SYN -j TCPMSS --clamp-mss-to-pmtu
сделать только:
Цитировать
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
« Последнее редактирование: 04 Август 2010, 17:04:02 от MaratSh »

Гарри Кашпировский

  • Автор темы
  • Гость
MaratSh в твоих словах может и есть рациональное зерно, но я его не увидел :)
- Настройка рассматривается альтернативой настройке ICS в Windows, там плюшки, навроде DHCP|DNS уже есть, хоть и работают через пень-колоду.
- Тема настроек  соединений провайера, тем более коммутируемых соединений, вообще отдельная тема. Затрагивать её в данном аспекте не имеет смысла.
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
В результате, раздаем бесплатный интернет соседям по свитчу ^^
« Последнее редактирование: 04 Август 2010, 17:07:13 от KT315 »

Оффлайн thunderamur

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 6702
  • Ubuntu 16.04
    • Просмотр профиля
обычно людям надо без всяких дхцп-серверов, просто в статике, да соединение встаёт быстрее так...

Дано:
Сетевая карточка eth1 подключенная к интернету и
eth0 подключенная к сети с адресом 192.168.0.1 к которой подключена сеть с адресами 192.168.0.* в которой нужно раздать интернет.

Раздача инета: (/etc/rc.local)

iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward

Прописываем шлюз и DNS-сервера на клиентах и радуемся расшаренному Инету

З.Ы.: Сам правда в rc.local не пишу, а сохраняю правила отдельно, ибо много их, но так короче.
« Последнее редактирование: 04 Август 2010, 17:14:33 от Thunde® »

Оффлайн [DarkNet]Alpha

  • Активист
  • *
  • Сообщений: 987
  • Эмоциональный эльдар
    • Просмотр профиля
    • EBM-радио
Опа, спасибо. Наконец-то внятная инструкция. Но сюда бы ещё ссылок про iptables и т.д. для любителей позаниматься сексом с мозгом.
Я вот iptables никак не пойму. :(

И да. Расшариваем.

Гарри Кашпировский

  • Автор темы
  • Гость
MaratSh  Go to searсh -> setup vpn connections in Linux.  >:(
Еще раз повторяю для плоховидящих: тема настройки VPN не имеет ничего общего с раздачей интернета.
Thunde® да, это все понятно, что можно вообще двумя строками обойтись, но я хотел подойти к вопросу более полно, что бы затем не возникало вопросов, "а вот после перезагрузки, у меня ничего не работает".
DarknetAlpha, спасибо, поправим :)

Оффлайн thunderamur

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 6702
  • Ubuntu 16.04
    • Просмотр профиля
Thunde® да, это все понятно, что можно вообще двумя строками обойтись, но я хотел подойти к вопросу более полно, что бы затем не возникало вопросов, "а вот после перезагрузки, у меня ничего не работает".

Цитировать
Раздача инета: (/etc/rc.local)

вообще надо стремится к кратчайшему пути, его и надо показать в самом начале, большинству будет достаточно, а уж ежели человек хочет большего, пусть читает дальше  ;)

Оффлайн lega911

  • Участник
  • *
  • Сообщений: 193
    • Просмотр профиля
    • python & linux
для кратчайшего пути лучше сразу скриптик сделать, который пнул и все заработало :)

Гарри Кашпировский

  • Автор темы
  • Гость
Thunde®, я читаю записи в rc.local костылём, если ты посмотришь, сюда, то английским по-белому написано
Redhat based distributions we can add our own scripts or programs into the /etc/rc.d/rc.local file, however there is no such file in a Debian based system.Поэтому я стараюсь избегать этого скрипта, да и печальный опыт уже научил не пользоваться такими штуками.
lega911, да можно и скрипт, но от этого, мне кажеться, будет еще больше вопросов :) Да и лениво скрипт для таких вещей писать.

Оффлайн thunderamur

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 6702
  • Ubuntu 16.04
    • Просмотр профиля
Thunde®, я читаю записи в rc.local костылём, если ты посмотришь, сюда, то английским по-белому написано
Redhat based distributions we can add our own scripts or programs into the /etc/rc.d/rc.local file, however there is no such file in a Debian based system.Поэтому я стараюсь избегать этого скрипта, да и печальный опыт уже научил не пользоваться такими штуками.
ну я какбе тоже писал:
Цитировать
З.Ы.: Сам правда в rc.local не пишу, а сохраняю правила отдельно, ибо много их, но так короче.
ладно, как сам делаю:
в /etc/sysctl.conf раскомментируем:
net.ipv4.ip_forward=1в терминале:
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables-save > /etc/iptables.up.rules
echo "pre-up iptables-restore < /etc/iptables.up.rules" >> /etc/network/interfaces

в принципе тоже довольно коротко.

Оффлайн RustemNur

  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 2914
  • умрешь с вами
    • Просмотр профиля
Уважаемый транзистор!
Ты просто молодец!
Ты сделал то, что все остальным было лениво/в падлу/а хрен его знает.
Ты сейчас так раскрутил ubuntu, что у всех "пиарщиков" суицидальные настроения.

ЗЫ: ну просто прелесть, елы-палы!
Уважаю.
 ;)

Гарри Кашпировский

  • Автор темы
  • Гость
для кратчайшего пути лучше сразу скриптик сделать, который пнул и все заработало :)
(Нажмите, чтобы показать/скрыть)
Все вопросы к самому себе ;)
RustemNur, признаться мне самому было впадлу, но нервы себе дороже объяснять каждому :)
Если модераторы прилепят тему, думаю, никому хуже от этого не станет.
« Последнее редактирование: 27 Август 2011, 22:34:27 от KT315 »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 24216
    • Просмотр профиля
"pre-down iptables-save >/etc/iptables.conf"
Убери. Это создаёт проблем больше, чем решает.
Редактировать его нельзя - убьётся при рестарте, какую-нить времянку в нетфильтр не воткнёшь - застрянет, пока руками не выковыряешь.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Гарри Кашпировский

  • Автор темы
  • Гость
Да уж, если для сервера, то грош цена этому хау-ту  :coolsmiley:
      Согласен, не для сервера, скорее для рабочей станции.
      Когда писал эту заметку я руководствовался следующим. НОВИЧОК, который бы захотел бы реализовать подобное, не станет лезть в дебри форума, посиковиков и мануалов, он просто плюнет на всё. Настроив же раздачу интернета, появляються новые задачи, как-то ограничения траффика, скорости и другие подобные вещи. Если это работает, то почему бы не работать остальному. Возникает интерес.
      NetworkManager я не рассматривал по двум причинам, во-первых, считаю, что для таких задач он еще не совсем готов в плане безотказности; во вторых, он берёт управление сетью ПОСЛЕ авторизации пользователя в системе, а те системы, где необходимо быстрое переключение между сетевыми профилями с помощью NetworkManager, работать в таком виде не должны, бо они больше клиентами являються.
      Что касаеться расшаривании интернета при коммутируемых соединениях, повторю в третий раз, настройка этих соединений, не рассматриваеться по причине очень многих ньюансов, как то шифрование, параметры подключения и других прочих описанных в мануалах, поэтому я сразу оговорился, что рассматриваю настройку только одного соедининия, смотрящего в домашнюю|локальную сеть, даже упростив правило iptables, дабы не зависело от названия интерфейса. Естественно, что человек взявшийся за полную настройку сервера, обязан быть подготовлен теоретически, для этого в конце первого поста есть полезные ссылки, касаемо настройки в этом ключе - расшаривании интернета.
      А Вы, как модератор этого раздела, кроме того, что чистить, могли бы нарисовать краткий FAQ, отвечающий Вашим взглядам, бо то, что было и есть, выглядит еще плачевнее.
     Честь имею!
« Последнее редактирование: 09 Август 2010, 16:04:13 от Saha »

Оффлайн bubuntu-ru

  • Любитель
  • *
  • Сообщений: 92
    • Просмотр профиля
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
В результате, раздаем бесплатный интернет соседям по свитчу ^^
Свитч имеется ввиду тот, что в подъезде(когда инет по витухе заходит в кв)? Чел может так имел ввиду -A POSTROUTING -o ppp0 -j MASQUERADE , когда пппое.

 

Страница сгенерирована за 0.241 секунд. Запросов: 23.