Internet sharing (Русский)

From ArchWiki
Revision as of 10:11, 18 February 2015 by Masterslave (talk | contribs) (Назначение ip адресов клиентским компьютерам: fix external link)
Jump to: navigation, search
Состояние перевода: На этой странице представлен перевод статьи Internet sharing. Дата последней синхронизации: 2014-10-03. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

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

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

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

Настройка

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

Совет: Вы можете назвать ваши интерфейсы так же, используя udev (Русский)#Установка постоянных имен устройств.

Статический 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

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

# 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

Включите NAT

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

# iptables -t nat -A POSTROUTING -o internet0 -j MASQUERADE
# iptables -A FORWARD -i net0 -o internet0 -j ACCEPT
# iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -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.