Не работает раздача интернета через ноутбук

WeedMan

New member
Сообщения
4
#1
Всем привет. Имеется ноутбук на котором:
* Астра 2.12
* wlan0
* eth0
Интернет принимаю на wlan0.
Цель: Раздать по проводу через eth0 на другой компьютер интернет.

Включил ip_forward:
echo 1 > /proc/sys/net/ipv4/ip_forward
Далее работал через NetworkManager. В сети нашёл два вариант решения:
1. Создать enternet соединение. Далее выбрать устройство (eth0) и на вкладке IPv4 выбрать "Общее ..."
2. Создать соединение типа Мост. Далее добавить подчинённое устройство (eth0) и в настройках IPv4 снова выставить "Общее ..."

И такая схема не работать. Пробовал менять IP и Gateway как на хосте так и на клиенте, но доступа к интернету не получилось установить.
Для соединения которое я пытаюсь подключить к клиенту, nmcli на Астре всегда пишет что ожидает IP.
Машины пробовал соединять как обычным патч-кордом так и кросс.

Куда копать, почему соединение не работает должным образом?
 

oko

New member
Сообщения
964
#2
Копать в направлении этого же форума или Сети вообще, где не единожды обсуждалось, как сделать шлюз, нужен или не нужен сетевой мост, что это такое и чем плох NetworkManager...
 

WeedMan

New member
Сообщения
4
#3
Ну я как-то отредактировал /etc/network/interfaces по одному гайду по созданию моста. После перезагрузки комп вообще не загрузился, только с recovery mod всё прошло. Во избежании таких проблем поэтому и спрашиваю. Проблема на уровне NetworkManager или на уровне ОС. Может вообще по другому надо делать?
 

Montfer

New member
Сообщения
1 586
#4
мне кажется, что вам надо через iptables прятать внутренную сеть за nat.
 

WeedMan

New member
Сообщения
4
#6
Спасибо Montfer. Обязательно ознакомлюсь. А вообще с iptables тоже игрался:
iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
iptables --append FORWARD --in-interface eth1 -j ACCEPT

После ознакомления с видео попробую ещё.
 

oko

New member
Сообщения
964
#7
to WeedMan
Если masquerade/статический nat через iptables, то это не имеет никакого отноешния к сетевому мосту. Грубо говоря, мост работает как коммутатор, связывая между собой два сетевых интерфейса на L2-уровне. А NAT уже функционал маршрутизатора, т.е. L3-уровень. И вам нужно понять, какой функционал вам нужен, а затем уже выбирать под это инструмент. И, главное, можно вообще без NAT обойтись при определенных раскладах...
И да, объединять мостом wifi-адаптер и проводной адаптер - то еще удовольствие. Если хотите, могу скинуть примерный конфиг под Debian (у меня домашний маршрутизатор примерно так и работает). Однако, что-то мне подсказывает, что вам достаточно будет и NAT без всяких мостов...

Крайний раз пишу сюда памятку по настрйоке типового шлюза (на примере топикстартера), чтобы потом ссылаться на нее...
1. Для разрешения прохождения трафика через наш шлюз раскомменчиваем строку #net.ipv4.ip_forward=1 в /etc/sysctl.conf.
2. Удаляем нахрен NetworkManager (sudo systemctl stop NetworkManager && sudo systemctl disable NetworkManager) и отныне будем все конфигурить через файл /etc/network/interfaces.
3. В нем прописываем наши сетевые интерфейсы, включая локальный петлевой (обязательно)
# Локальный петлевой интерфейс
auto lo
iface lo inet loopback

# Линк в ЛВС
auto eth0
iface eth0 inet static
address 10.8.0.1
netmask 255.255.255.0
dns-nameservers IP-DNS-сервера-провайдера-или-кого-то-еще

# Линк к провайдеру по wifi (предположим, адрес от провайдера получаем динамически по DHCP)
auto wlan0
iface wlan0 inet dhcp

4. Настраиваем правила межсетевого экрана и NAT-трансляции в /etc/iptables.rules
# Оставляем цепочки NAT по умолчанию
*nat
:pREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:pOSTROUTING ACCEPT [0:0]
# Добавляем правила маскарада - динамической NAT-трансляции трафика от интерфейса ЛВС (eth0) во внешние сети через интерфейс wlan0
iptables -t nat -A POSTROUTING -o wlan0 -s 10.8.0.0/24 -j MASQUERADE
COMMIT

# Не трогаем цепочку mangle (что это и зачем это - добро пожаловать в Гугл)
*mangle
:pREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:pOSTROUTING ACCEPT [0:0]
COMMIT

# Вносим базовые настройки в цепочку filter (собственно, межсетевой экран L2-L4 уровней)
# По умолчанию блокируем входящий, исходящий и транзитный (проходящий через шлюз) трафик
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT DROP [0:0]
# Добавляем правила обработки (разрешить) входящего трафика для локального петлевого интерфейса
-A INPUT -i lo -j ACCEPT
# Добавляем правило обработки входящего трафика для сетевых соединений по протоколам с поддержкой состояний (TCP, ICMP и т.д.), чтобы наш шлюз сам мог обращаться к кому-то во внешних сетях по этим протоколам
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# Аналогично для обработки транзитного (проходящего через шлюз) трафика
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
# Явно разрешаем трафику от интерфейса eth0 и подсети 10.8.0.0/24 проходить через шлюз куда-либо
-A FORWARD -s 10.8.0.0/24 -i eth0 -j ACCEPT
# Добавляем правило обработки (разрешить) исходящего трафика для локального петлевого интерфейса
-A OUTPUT -o lo -j ACCEPT
# И разрешаем нашему шлюзу отправлять трафик на оба своих интерфейса в любые подсети
-A OUTPUT -o wlan0 -j ACCEPT
-A OUTPUT -o eth0 -j ACCEPT
COMMIT

5. Инсталлируем wpasupplicant (поскольку NetworkManager отключили, а wifi на шлюзе хочется), читаем про него в Гугле и настраиваем конфигурационный файл /etc/wpa_supplicant_wpa_supplicant.conf
etwork={
ssid="ИМЯ-ТОЧКИ-ДОСТУПА-WIFI"
proto=RSN
key_mgmt=ТИП-ШИФРОВАНИЯ-ТОЧКИ-ДОСТУПА (чаще всего - WPA-PSK)
psk="ПАРОЛЬ-ТОЧКИ-ДОСТУПА"
}
6. Создаем systemd-Unit в формате старого rc.local для возможности запускать какие-либо скрипты или команды/утилиты при загрузке ОС - /etc/systemd/system/rc-local.service. Создаем файл /etc/rc.local и делаем его исполняемым - chmod +x /etc/rc.local.
[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
StandardOutput=tty
RemainAfterExit=yes
SysVStartPriority=99
[Install]
WantedBy=multi-user.target
7. В созданном /etc/rc.local прописываем запуск wpa_supplicant при старте системы и применение правил межсетевого экрана iptables/netfilter
#!/bin/bash
/sbin/wpa_supplicant -B -iwlan0 -Dwext -c /etc/wpa_supplicant/wpa_supplicant.conf
/sbin/iptables-restore /etc/iptables.rules
exit 0
8. Ребутаемся и проверяем. Если что-то косячит - курим мат.часть...

ЗЫ Как обойтись без Masquerade (который работает значительно медленнее, чем статический NAT), прописать в iptables иные правила фильтрации трафика и т.д. - в качестве домашнего задания...
 

WeedMan

New member
Сообщения
4
#8
@oko спасибо за крайне полезную информацию, но моя цель не делать стационарный маршрутизатор. Более того в Astra из коробки стоит Network Manager и все настройки производятся на ноутбуке где очень важна мобильность и данный способ, на мой взгляд, не очень дружелюбен к пользователю.
Но я победил данную проблему!
Итак, сперва я вернул ip_forward в 0 (как было изначально). Конфиг /etc/network/interfaces я не трогал и соответственно все манипуляции с iptables сбросились после перезагрузки.
Первая полезная ссылка была в Fedora Magazin, где было указано, что после включения расшаривания происходит:
  • enables IP forwarding for the interface;
  • adds firewall rules and enables masquerading;
  • starts dnsmasq as a DHCP and DNS server.
Вторая полезная ссылка wiki Debian, где было указано что NetworkManager не обслуживает интерфейсы прописанные в /etc/network/interfaces. Для управления интерфейсами надо разрешить опцию в настройках NetworkManager.
Поехали:
1. В файле /etc/NetworkManager/NetworkManager.conf в секции ifupdown для managed устанавливается значение true. (С учётом того что в /etc/network/interfaces прописан только lo, то возможно изменять конфиг NetworkManager не обязательно)
2. Установить dnsmasq-base. Обращаю внимание на то, что в репозитории есть ещё просто dnsmasq - его ставить нельзя иначе работать не будет.
Всё, теперь всё работает. В настройках соединений NetworkManager выбираем необходимо интерфейс и делаем его "Общий ..." и всё работает!
Код:
lisa@astra:~$ ps aux | grep dns
nobody    1274  0.0  0.2  54152  3968 ?        S    13:43   0:00 /usr/sbin/dnsmasq --conf-file --no-hosts --keep-in-foreground --bind-interfaces --except-interface=lo --clear-on-reload --strict-order --listen-address=10.42.0.1 --dhcp-range=10.42.0.10,10.42.0.254,60m --dhcp-lease-max=50 --pid-file=/run/nm-dnsmasq-eth0.pid --conf-dir=/etc/NetworkManager/dnsmasq-shared.d
P.S. Пока разбирался с пакетами хотел бы вынести несколько заметок:
*dnsmasq - это служба, а dnsmasq-base это скомпилированная утилита которую как раз использует NetworkManager
*NetworkManager сам конфигурирует файл /etc/resolv.conf. Ставил пакет resolvconf - он перекрывал файл сгенерированный NM, но сам NW продолжал работать.
* Из коробки в Astra стоят DHCP пакеты isc-dhcp-client и isc-dhcp-common. По умолчанию NM не работает с ним, но я предполагаю что через файл настроек можно к нему подключиться.
* Я не понял какой firewall использует NM