Представьте: у вас есть два компьютера — один с Windows, другой с Linux (скажем, Arch), и вы хотите, чтобы Windows-сервер интернет «раздавал» через кабель второму. Или ноутбук с вайфаем должен раздать интернет на стационарный комп по проводу. Казалось бы — дело плёвое, воткнул кабель и всё работает? Не тут-то было! Сетевые настройки — это как сломанный аккордеон, играешь на нём, а звук то странный, то совсем пропадает.

В этой статье мы подробно разберём, как настроить локальную сеть с общим доступом к интернету через Linux, объясним понятия IP forwarding, NAT, iptables, и даже поднимем тему ошибок dropped packets и overruns. Всё просто и понятно, даже если вы не знаете, что такое prefixlen или txqueuelen!


Как работает раздача интернета с Linux?

Первое, что нужно понять — Linux в роли роутера должен уметь перенаправлять пакеты между интерфейсами. Если представить интернет как реку, то Linux — это мост, по которому вода (данные) должна свободно течь из одного берега (внешний интерфейс, например Wi-Fi) на другой (внутренний интерфейс, например Ethernet).

Для этого есть системная опция — IP forwarding. Без неё пакетам запрещено перепрыгивать с одного интерфейса на другой.

Включение IP forwarding

Чтобы разрешить Linux быть мостом для интернета, выполните команду:

echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

Это включит пересылку пакетов на лету. Но после перезагрузки настройки сойдут на нет, поэтому добавьте или раскомментируйте строку в /etc/sysctl.conf:

net.ipv4.ip_forward=1

Теперь ваш Linux готов к тому, чтобы быть «проводником» интернет-пакетов.


Что такое NAT, Masquerade и SNAT? Или как Linux маскирует свои намерения

Допустим, ваш Linux-мост подключен к интернету через Wi-Fi, а внутренний компьютер находится в локальной сети. Внешний провайдер видит только ваш Linux с одним IP-адресом, а не все внутренние компьютеры. Как Linux это делает? Через NAT (Network Address Translation) — трансляцию сетевых адресов.

Masquerade (маскарадинг)

Это особый вид NAT, который подменяет адрес отправителя у пакетов из внутренней сети на внешний IP вашего Linux. Настраивается так:

sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

Где wlan0 — внешний интерфейс, по которому идёт интернет.

SNAT (Source NAT)

Если у вас статический IP и хотите более точный контроль, можно использовать SNAT:

sudo iptables -t nat -A POSTROUTING -o wlan0 -j SNAT --to-source 192.168.1.100

Где 192.168.1.100 — IP вашего внешнего интерфейса.


Настройка iptables — охранника вашей сети

iptables — это как таможня на границе, которая пропускает только нужные пакеты. Чтобы раздать интернет, нужно разрешить пересылку и настроить правила маскарадинга. Вот минимальный набор:

Действие Команда
Включить маскарадинг на внешнем интерфейсе sudo iptables -t nat -A POSTROUTING -o <внешний интерфейс> -j MASQUERADE
Разрешить пересылку пакетов sudo iptables -A FORWARD -i <внутренний интерфейс> -o <внешний интерфейс> -j ACCEPT
Разрешить обратный трафик sudo iptables -A FORWARD -i <внешний интерфейс> -o <внутренний интерфейс> -m state --state RELATED,ESTABLISHED -j ACCEPT

Без этих правил интернет просто не «пройдёт» на внутренний компьютер.


Что такое dropped packets, overruns и прочие страшные слова?

Если смотреть на статистику интерфейса через ifconfig или ip -s link, можно увидеть столбцы dropped, errors, overruns. Это — счётчики проблем с пакетами.

  • Dropped (отброшенные пакеты) — пакеты, которые интерфейс не смог обработать. Представьте, как если в магазин пришло слишком много покупателей, а кассир не успевает всех обслужить.
  • Errors (ошибки) — пакеты с повреждёнными данными.
  • Overruns — переполнение буфера интерфейса.

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


Можно ли раздать интернет через Network Manager без «копания в конфигах»?

Многие пользователи хотят волшебной кнопки «раздать интернет» в Network Manager — чтобы не лезть в терминал и не запоминать iptables. К сожалению, на практике это не всегда работает просто.

Network Manager умеет создавать общий доступ к интернету, но часто сталкивается с конфликтами IP-адресов, ошибками в маскарадинге и неправильной настройкой DHCP-сервера. В Windows всё просто: поставил галочку — и всё работает. В Linux — чаще всего придется «руками» настраивать маршрутизацию и iptables.


Как настроить интерфейсы и что значат все эти prefixlen, txqueuelen и mtu?

Команда ifconfig -a или ip addr покажет все параметры сетевых интерфейсов. Вот кратко:

Параметр Что значит? Аналогия
inet IP-адрес интерфейса Адрес дома
netmask Маска подсети, например 255.255.255.0 Граница района
broadcast Широковещательный адрес подсети Мегафон для всех соседей
prefixlen Количество бит в маске сети, например 24 Как много улиц в районе
txqueuelen Размер очереди исходящих пакетов Очередь на кассу
MTU Максимальный размер пакета (обычно 1500 байт) Максимальный размер посылки
RX/TX packets Получено/отправлено пакетов Количество писем в ящике
dropped/errors/overruns Проблемы с пакетами Забракованные посылки

Ошибки при раздаче интернета: где чаще всего спотыкаются

  • Не включен IP forwarding — пакеты не идут вообще.
  • Неправильно настроен iptables — пакеты блокируются или адреса не трансформируются.
  • Конфликты IP-адресов — внутренние устройства получают одинаковые адреса или неправильные шлюзы.
  • Неправильный интерфейс в командах — перепутали wlan0 и eth0.
  • Настройки DHCP не настроены — внутренний компьютер не получает IP или настройки сети.
  • Network Manager конфликтует с ручными настройками — не стоит совмещать оба способа.

Как сделать настройки постоянными?

Команды iptables и включение ip_forward сбрасываются при перезагрузке. Есть несколько способов сохранить настройки:

  • Добавить нужные команды в скрипт /etc/rc.local (до строки exit 0).
  • Использовать специализированные сервисы и скрипты для iptables (например, iptables-persistent).
  • Изменить /etc/sysctl.conf для IP forwarding.

Итоговая шпаргалка: как раздать интернет через Linux

Шаг Команда/Действие
Включить пересылку пакетов echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward и net.ipv4.ip_forward=1 в /etc/sysctl.conf
Настроить NAT маскарадинг sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
Разрешить форвардинг sudo iptables -A FORWARD -i eth0 -o wlan0 -j ACCEPT и sudo iptables -A FORWARD -i wlan0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
Сохранить настройки Добавить команды в /etc/rc.local или использовать iptables-persistent
Проверить интерфейсы ifconfig или ip addr
Проверить наличие dropped/errors ifconfig или ip -s link

FAQ: часто задаваемые вопросы

Можно ли раздать интернет, не лезя в настройки и терминал?
Чисто через Network Manager иногда можно, но часто придётся делать ручные настройки, чтобы всё работало надёжно.

Почему пинг есть, а интернета нет?
Часто из-за неправильных правил iptables или отсутствия NAT.

Что делать, если dropped packets растут?
Проверить нагрузку, качество кабелей, возможно, драйвера.

Можно ли использовать SNAT вместо MASQUERADE?
Да, если у вас статический IP и хотите более контролируемую трансляцию.


Советы для суперсчастливого раздачи интернета

  • Всегда делайте резервную копию конфигураций перед изменениями.
  • Используйте sudo iptables -L -v для проверки правил.
  • Не смешивайте ручную настройку и Network Manager.
  • Помните, что «пакет» — это как посылка с данными, и если её потерять — интернет не работает.
  • И наконец, не бойтесь экспериментировать — сетевые настройки в Linux как кулинария: иногда нужно добавить специи, чтобы получился шедевр!

Вот и всё, теперь вы можете с гордостью сказать, что сделали Linux роутером и раздали интернет друзьям, соседям и даже бабушке по USB-кабелю! Пусть пакеты текут рекой, а dropped пакеты уйдут в прошлое!