Internet sharing (Русский)

Эта статья описывает как раздать подключение к интернету от одного компьютера одному или нескольким другим компьютерам.

Состояние перевода: На этой странице представлен перевод статьи Internet sharing. Дата последней синхронизации: 2015-07-29. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Системные требования

  • Компьютер, выступающий в роли сервера должен иметь несколько сетевых интерфейсов.
  • Сетевой интерфейс должен быть подключен к компьютеру (компьютерам), которые собираются получать доступ в интернет. Это может быть один или несколько компьютеров. Чтобы раздавать интернет нескольким компьютерам, может потребоваться свич. Если вы раздаёте только одной машине, вам достаточно перекрёстного кабеля.

Настройка

В этом разделе предполагается, что сетевой интерфейс, подсоединяемый к клиентскому компьютеру (компьютерам), называется net0, а сетевой интерфейс, подключенный к интернету называется internet0.

Статический IP адрес

Назначьте статический IPv4 адрес интерфейсу, подключенному к другим компьютерам. Первые 3 байта этого адреса не могут быть такими же как у другого интерфейса.

# ip link set up dev net0
# ip addr add 192.168.123.100/24 dev net0 # произвольный адрес

Чтобы статический ip был назначен при загрузке, вы можете использовать netctl (Русский).

Разрешите пересылку пакетов

Проверьте текущие настройки перенаправления пакетов:

# sysctl -a | grep forward

Вы заметите, что эта опция существует для управления переадресацией по умолчанию, на интерфейсе, а также отдельные опции для IPv4/IPv6 на интерфейсе.

Введите следующую команду для временного разрешения пересылки пакетов во время выполнения:

# sysctl net.ipv4.ip_forward=1

Чтобы разрешение на пересылку для всех интерфейсов осталось после перезагрузки, отредактируйте :

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

Примечание: systemd-networkd (Русский) предоставляет новую семантику пересылки в версии 220/221. Если вы используете systemd-networkd для управления сетевыми интерфейсами, оно перекроет настройки net.*.ip_forward, по умолчанию выключив пересылку. Чтобы оно принимало вышеописанные настройки, нужно задать IPForward=kernel в конфигурационном файле интерфейса systemd-networkd (смотрите systemd.network(5) для дополнительной информации).

Включите NAT

Установите пакет из официальных репозиториев. Используйте iptables, чтобы включитьNAT:

# iptables -t nat -A POSTROUTING -o internet0 -j MASQUERADE
# iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# iptables -A FORWARD -i net0 -o internet0 -j ACCEPT
Примечание: Разумеется, это тоже будет работать с мобильным широкополосном соединением (обычно называемом ppp0 на раздающем компьютере).

Прочтите статью iptables (Русский) для дополнительной информации (в особенности о сохранении правил и их автоматическом применении при загрузке). Также есть отличная инструкция по iptables Simple stateful firewall (Русский).

Назначение ip адресов клиентским компьютерам

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

Вы можете прочитать wiki статью dhcpd (Русский), чтобы настроить dhcp сервер. Затем установите dhcpcd на каждый клиентский компьютер.

Если вы не планируете такое подключение на регулярной основе, вы можете задать ip адреса каждому клиенту вручную.

Назначение ip адресов вручную

Если вы не используете dhcp, назначьте ip адрес и шлюз по умолчанию каждому клиентскому компьютеру:

# ip addr add 192.168.123.201/24 dev eth0  # произвольный адрес, первые три байта должны совпадать с теми, которые вы придумали ранее
# ip link set up dev eth0
# ip route add default via 192.168.123.100 dev eth0  # тот самый адрес, который вы назначили раздающему интерфейсу

Укажите DNS сервер на каждом клиентском компьютере. Смотрите resolv.conf для дополнительной информации.

Теперь клиентский компьютер должен иметь доступ в Internet.

Решение проблем

Если вы можете подключить два компьютера, но не можете пересылать данные (например, если клиентский делает DHCP запрос к раздающему компьютеру, раздающий компьютер получает запрос и предлагает IP клиенту, но клиент не принимает его, а вместо этого происходит тайм аут), проверьте, что вы не имеете других интерферирующих правил iptables.

Смотрите также

This article is issued from Archlinux. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.