- Internet sharing (Русский)
- Системные требования
- Настройка
- Статический IP адрес
- Разрешите пересылку пакетов
- Включите NAT
- С помощью iptables
- С помощью nftables
- С помощью firewalld
- Назначение ip адресов клиентским компьютерам
- Назначение ip адресов вручную
- Решение проблем
- Клиенты не могут получить доступ к интернету или не могут подключиться
- Смотрите также
- Настройка статического IP адреса в Arch Linux / BlackArch
- Настройка статического IP при установке Arch Linux / BlackArch
- Настройка статического IP в Arch Linux / BlackArch сохраняющегося после перезагрузки
- Близкие статьи
Internet sharing (Русский)
Состояние перевода: На этой странице представлен перевод статьи Internet sharing. Дата последней синхронизации: 11 декабря 2022. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.
Эта статья описывает, как раздать подключение к интернету от одного компьютера одному или нескольким другим компьютерам.
Системные требования
Компьютер, выполняющий роль сервера, должен иметь дополнительное сетевое устройство. На нём должно работать соединение канального уровня с компьютером, который будет получать интернет:
- Чтобы иметь возможность поделиться интернетом с несколькими компьютерами, можно использовать коммутатор.
- Можно раздавать интернет через беспроводную сеть; подробности в статье Программная точка доступа.
- Если доступ предоставляется только одному компьютеру, достаточно перекрёстного кабеля. Если одна из сетевых карт поддерживает MDI-X, перекрёстный кабель не нужен и можно использовать обычный Ethernet-кабель. Чтобы разобраться в этом, можно выполнить команду ethtool интерфейс | grep MDI от имени root.
Настройка
В этом разделе предполагается, что сетевой интерфейс, подсоединяемый к клиентскому компьютеру (компьютерам), называется net0, а сетевой интерфейс, подключенный к интернету называется internet0.
Совет: Вы можете назвать ваши интерфейсы так же, используя udev (Русский)#Установка постоянных имен устройств.
Вся настройка выполняется на компьютере, выполняющем роль сервера, за исключением последнего шага в разделе #Назначение ip адресов клиентским компьютерам.
Статический IP адрес
Назначьте статический IPv4 адрес интерфейсу, подключенному к другим компьютерам. Первые 3 байта этого адреса не могут быть такими же как у другого интерфейса.
# ip link set up dev net0 # ip addr add 192.168.123.100/24 dev net0 # произвольный адрес
Чтобы статический ip был назначен при загрузке, можно использовать какой-нибудь сетевой менеджер.
Разрешите пересылку пакетов
Проверьте текущие настройки перенаправления пакетов:
Вы заметите, что эта опция существует для управления переадресацией по умолчанию, на интерфейсе, а также отдельные опции для IPv4/IPv6 на интерфейсе.
Введите следующую команду для временного разрешения пересылки пакетов во время выполнения:
# sysctl net.ipv4.ip_forward=1
Совет: Чтобы включить пересылку пакетов только на определённом интерфейсе, можно вместо этой команды использовать sysctl net.ipv4.conf.интерфейс.forwarding=1 .
Важно: Если в системе используется systemd-networkd для управления сетевыми интерфейсами, настройка отдельных интерфейсов по IPv4 невозможна, так логика systemd будет использовать глобальную конфигурацию IPv4 на всех интерфейсах. Рекомендуемым обходным решением является использование межсетевого экрана для запрета пересылки на отдельных интерфейсах. Смотрите systemd.network(5) для более подробной информации. Семантика IPForward=kernel , введённая в старой версии systemd 220/221 для следования настройкам ядра, больше не применяется.[1] [2]
Чтобы разрешение на пересылку для всех интерфейсов осталось после перезагрузки, отредактируйте /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 . Используйте 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 на раздающем компьютере).
Используйте -I DOCKER-USER вместо -A FORWARD , если у вас установлен docker. [3]
# iptables -t nat -A POSTROUTING -o internet0 -j MASQUERADE # iptables -I DOCKER-USER 1 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT # iptables -I DOCKER-USER 2 -i net0 -o internet0 -j ACCEPT
При подключении через PPPoE уменьшите mss до pmtu, чтобы предотвратить фрагментацию:
# iptables -t mangle -A FORWARD -o ppp0 -p tcp -m tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
Прочтите статью iptables (Русский) для дополнительной информации (в особенности о сохранении правил и их автоматическом применении при загрузке). Также есть отличная инструкция по iptables Simple stateful firewall (Русский).
С помощью nftables
Установите пакет nftables . Для включения NAT с помощью nftables создайте цепочку postrouting в новой/существующей таблице:
# nft add table inet nat # nft add chain inet nat postrouting '< type nat hook postrouting priority 100 ; >'
После этого включите маскарадинг адресов из интерфейса net0 для интерфейса internet0 :
# nft add rule inet nat postrouting oifname internet0 masquerade
Возможно, вы захотите добавить ещё несколько ограничений межсетевого экрана на пересылку (при условии, что таблица фильтров уже существует и настроена как описано в разделе nftables (Русский)#Сервер):
# nft add chain inet filter forward '< type filter hook forward priority 0; policy drop; >' # nft add rule inet filter forward ct state related,established accept # nft add rule inet filter forward iifname net0 oifname internet0 accept
Дополнительную информацию о NAT в nftables можно найти в nftables Wiki. Чтобы сделать изменения постоянными, следуйте инструкциям в статье nftables (Русский).
С помощью firewalld
Установите пакет firewalld . firewalld — это демон межсетевого экрана, который полагается на nftables и iptables. Сначала измените зоны сетевых интерфейсов firewalld:
# firewall-cmd --zone=external --change-interface=internet0 --permanent # firewall-cmd --zone=internal --change-interface=net0 --permanent
Затем добавьте новую политику для пропуска трафика между внутренней и внешней зоной:
# firewall-cmd --permanent --new-policy int2ext # firewall-cmd --permanent --policy int2ext --add-ingress-zone internal # firewall-cmd --permanent --policy int2ext --add-egress-zone external # firewall-cmd --permanent --policy int2ext --set-target ACCEPT # firewall-cmd --reload
Совет: Вы можете использовать более строгие правила политики, чем просто ACCEPT , как показано в разделе Firewall Rules в документации firewalld.[4]
Например, чтобы разрешить доступ в интернет только узлам 192.168.2.0/24 , выполните:
firewall-cmd —permanent —policy int2ext —add-rich-rule=’rule family=ipv4 source address=192.168.2.0/24 accept’ Не забудьте потом перегрузить правила:
Назначение ip адресов клиентским компьютерам
Если вы планируете регулярно подключать какие-то компьютеры для использования интернета через ваш компьютер, хорошей идеей будет установка dhcp сервера. В качестве DHCP-сервера можно использовать, например, dhcpd (Русский) или dnsmasq. Затем установите DHCP-клиент (например, dhcpcd) на каждый клиентский компьютер.
На стороне сервера должен быть разрешён приём пакетов на UDP-порт 67. Также нужно разрешить входящие соединения с UDP/TCP портом 53 для DNS запросов. Пример для iptables:
# iptables -I INPUT -p udp --dport 67 -i net0 -j ACCEPT # iptables -I INPUT -p udp --dport 53 -s 192.168.123.0/24 -j ACCEPT # iptables -I INPUT -p tcp --dport 53 -s 192.168.123.0/24 -j ACCEPT
Если вы не планируете такое подключение на регулярной основе, вы можете задать ip адреса каждому клиенту вручную.
Назначение ip адресов вручную
Вместо использования DHCP можно вручную задать статический IP-адрес и маршрут по умолчанию через 192.168.123.100 . Существует множество инструментов для соответствующей настройки сети. Одним из ярких примеров такого инструмента является ip(8) , смотрите раздел Настройка сети#Управление сетевым подключением. Или можно использовать файл .network , смотрите раздел systemd-networkd (Русский)#Проводной интерфейс со статическим IP-адресом для настройки статического IP.
Укажите DNS сервер на каждом клиентском компьютере. Смотрите resolv.conf для дополнительной информации.
Теперь клиентский компьютер должен иметь доступ в Internet.
Решение проблем
Если вы можете подключить два компьютера, но не можете пересылать данные (например, если клиентский делает DHCP запрос к раздающему компьютеру, раздающий компьютер получает запрос и предлагает IP клиенту, но клиент не принимает его, а вместо этого происходит тайм аут), проверьте, что вы не имеете других интерферирующих правил iptables.
Клиенты не могут получить доступ к интернету или не могут подключиться
Симптомы могут быть такие: клиенты получают сообщение host is down , когда пингуют хост, получают no route to host , когда пингуют устройства вне локальной сети (которые должны быть перенаправлены через NAT), DHCP-запросы не проходят через мост, .
Известно, что такие проблемы может вызывать Docker. Простое отключение юнитов docker.service и docker.socket решает проблему.
Смотрите также
Настройка статического IP адреса в Arch Linux / BlackArch
Бывают ситуации, когда мы не хотим использовать DHCP, а хотим назначить хосту статичный IP. Бывают ситуации, когда мы просто не можем использовать динамический IP адрес – на VDS, например. В этой небольшой инструкции будет показано, как установить статический IP на Arch Linux / BlackArch.
Настройка статического IP при установке Arch Linux / BlackArch
Если нам нужно установить статичный IP адрес на один раз, до перезагрузки (пример, когда это нужно, установка новой системы), то делается это так.
Для начала узнаём имя сетевого интерфейса:
После этого назначение статичного IP делается следующей командой (сам IP, маску подсети и имя сетевого интерфейса замените на свои):
ip a add 192.168.1.101/255.255.255.0 dev ens3
Вы можете немного сократить её:
ip a add 192.168.1.101/24 dev ens3
Тем не менее, этом этапе у вас ещё не будет соединения с Интернетом. Нам нужно прописать шлюз по умолчанию (адрес шлюза замените на свой):
ip route add default via 192.168.1.254
И… всё равно на этом этапе ещё не будет интернета. Нужно прописать DNS сервер.
Наконец-то, теперь можно проверять:
Сделанные таким образом изменения пропадут после перезагрузки.
Настройка статического IP в Arch Linux / BlackArch сохраняющегося после перезагрузки
Узнаем имя сетевого интерфейса:
Нам нужно создать файл с настройками сетевого интерфейса в каталоге /etc/netctl/. Нам необязательно писать его с нуля. Мы можем отредактировать один из примеров, которые поставляются с программой netctl. В следующей команде имя файла static.ens3 можете поменять на любое своё:
cp /etc/netctl/examples/ethenet-static /etc/netctl/static.ens3
Description='A basic static ethernet connection' Interface=ens3 Connection=ethernet IP=static Address=('185.87.49.81/22') #Routes=('192.168.0.0/24 via 192.168.1.2') Gateway='185.87.48.1' DNS=('8.8.8.8') ## For IPv6 autoconfiguration #IP6=stateless ## For IPv6 static address configuration #IP6=static #Address6=('1234:5678:9abc:def::1/64' '1234:3456::123/96') #Routes6=('abcd::1234') #Gateway6='1234:0:123::abcd'
- ens3 – имя моего сетевого интерфейса
- 185.87.49.81/22 – это IP и сокращённая запись маски подсети.
- 185.87.48.1 – шлюз по умолчанию.
- 8.8.8.8 – DNS сервер.
Больше ничего в этом файле я не менял.
После редактирования и сохранения файла активируйте и проверьте статус сетевого интерфейса (если вы поменяли имя файла на своё, то измените static.ens3 на имя своего файла):
netctl start static.ens3 netctl status static.ens3
Также наличие сети можно проверить пингом.
Чтобы изменения сохранились и после перезагрузки, выполните команду: