Internet sharing (Русский)
Эта статья описывает как раздать подключение к интернету от одного компьютера одному или нескольким другим компьютерам.
Системные требования
- Компьютер, выступающий в роли сервера должен иметь несколько сетевых интерфейсов.
- Сетевой интерфейс должен быть подключен к компьютеру (компьютерам), которые собираются получать доступ в интернет. Это может быть один или несколько компьютеров. Чтобы раздавать интернет нескольким компьютерам, может потребоваться свич. Если вы раздаёте только одной машине, вам достаточно перекрёстного кабеля.
Настройка
В этом разделе предполагается, что сетевой интерфейс, подсоединяемый к клиентскому компьютеру (компьютерам), называется 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
Чтобы разрешение на пересылку для всех интерфейсов осталось после перезагрузки, отредактируйте /etc/sysctl.d/30-ipforward.conf
:
/etc/sysctl.d/30-ipforward.conf
net.ipv4.ip_forward=1 net.ipv6.conf.default.forwarding=1 net.ipv6.conf.all.forwarding=1
После этого рекомендуется дважды проверить, что после перезагрузки пересылка работает как положено.
net.*.ip_forward
, по умолчанию выключив пересылку. Чтобы оно принимало вышеописанные настройки, нужно задать IPForward=kernel
в конфигурационном файле интерфейса systemd-networkd (смотрите systemd.network(5) для дополнительной информации).Включите NAT
Установите пакет iptables из официальных репозиториев. Используйте 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
Прочтите статью 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.