Вопрос или проблема
Добрый день. Вот диаграмма моей домашней сети:
x.x.1.14 x.x.1.99
--------- --------- --------- ----------
| | | | | | | |
| Comp1 |---|Rasp Pi|---|Router |---|Internet|
| | | | | | | | |
--------- --------- | --------- ----------
x.x.0.123 | x.x.0.1 8.8.8.8
|
| ---------
| | |
|-| Comp2 |
| |
---------
x.x.0.135
Я подключил две сети дома (одну WiFi и одну проводную), запустив iptables на Ubuntu 24.04.1 LTS на Raspberry Pi. Из Comp1 я смог пинговать Comp2 и интернет, но потом я сделал что-то глупое на своем Pi (поменял пароль root и выбросил стикер) и пришлось переделать свой Pi. Я заново настроил Pi с теми же сетевыми настройками, и теперь я снова могу пинговать Comp2 с Comp1, но не интернет. У меня есть множество записок, которые я набрал, когда пытался навести порядок с Pi в первый раз, но ничего из того, что я сделал до сих пор, не дало мне соединение с интернетом. Вот список того, что я попробовал до сих пор:
Нет
sudo iptables -t nat -A POSTROUTING -o 192.168.0.123 -j MASQUERADE
sudo iptables -A FORWARD -i 192.168.0.123 -o 192.168.1.99 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i 192.168.1.99 -o 192.168.0.123 -j ACCEPT
Нет
sudo iptables -t nat -A POSTROUTING -o 192.168.0.123 -j MASQUERADE
sudo iptables -A FORWARD -i 192.168.1.99 -o 192.168.0.123 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i 192.168.0.123 -o 192.168.1.99 -j ACCEPT
Нет
sudo iptables -t nat -A POSTROUTING -o 192.168.1.99 -j MASQUERADE
sudo iptables -A FORWARD -i 192.168.0.123 -o 192.168.1.99 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i 192.168.1.99 -o 192.168.0.123 -j ACCEPT
Нет
sudo iptables -t nat -A POSTROUTING -o 192.168.1.99 -j MASQUERADE
sudo iptables -A FORWARD -i 192.168.1.99 -o 192.168.0.123 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i 192.168.0.123 -o 192.168.1.99 -j ACCEPT
Нет
sudo iptables -I FORWARD -s 192.168.0.0/24 -d 192.168.1.0/24 -j ACCEPT
sudo iptables -I FORWARD -s 192.168.1.0/24 -d 192.168.0.0/24 -j ACCEPT
Нет
sudo iptables -A FORWARD -i 192.168.0.123 -o 192.168.1.99 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i 192.168.1.99 -o 192.168.0.123 -j ACCEPT
Нет
sudo iptables -I FORWARD -s 192.168.0.0/24 -d 192.168.1.0/24 -j ACCEPT
sudo iptables -I FORWARD -s 192.168.1.0/24 -d 192.168.0.0/24 -j ACCEPT
Нет
sudo iptables -I FORWARD -s 192.168.0.0/24 -d 192.168.1.0/24 -j ACCEPT
sudo iptables -I FORWARD -s 192.168.1.0/24 -d 192.168.0.0/24 -j ACCEPT
Я попробовал все эти варианты, потому что в первый раз допустил ошибку и перепутал IP-метки, судя по тому, что нашел в интернете, и это сработало. Итак, может кто-нибудь увидеть, что я сделал не так или что мне не хватает?
Спасибо,
Джо
И спасибо за быстрый ответ. Ладно, вот информация:
Comp1 – Linux
ens160 это 192.168.1.14
Pi – Linux
eth0 это 192.168.1.99
wlan0 это 192.168.0.123
Comp2 – Windows
192.168.0.135
iptables-save
# Сгенерировано iptables-save v1.8.10 (nf_tables) во вторник, 26 ноября 2024 года, 12:54:31
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [204777:66752196]
:OUTPUT ACCEPT [0:0]
-A FORWARD -s 192.168.1.0/24 -d 192.168.0.0/24 -j ACCEPT
-A FORWARD -s 192.168.0.0/24 -d 192.168.1.0/24 -j ACCEPT
COMMIT
# Завершено во вторник, 26 ноября 2024 года, 12:54:31
# Сгенерировано iptables-save v1.8.10 (nf_tables) во вторник, 26 ноября 2024 года, 12:54:31
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [117749:8274546]
-A POSTROUTING -o 192.168.0.123 -j MASQUERADE
-A POSTROUTING -o 192.168.0.123 -j MASQUERADE
COMMIT
# Завершено во вторник, 26 ноября 2024 года, 12:54:31
Джо
И вывод sysctl -p:
jfxb@Pi5:~$ sudo sysctl -p
[sudo] пароль для jfxb:
net.ipv4.ip_forward = 1
jfxb@Pi5:~$
Ответ или решение
Подключение к интернету через iptables на Raspberry Pi
Здравствуйте, Джо.
Я понимаю, что вы столкнулись с проблемой подключения к интернету через ваш Raspberry Pi, используя iptables. Давайте подробно разберем вашу ситуацию и попробуем выявить возможные причины, по которым у вас возникают трудности с подключением.
Анализ проблемы
Из вашего описания можно выделить несколько ключевых моментов:
- Сеть: Вы успешно настраивали интернет-соединение на Raspberry Pi, после чего дублировали настройки, но с новым паролем для root.
- Изначальная конфигурация: Вы можете пинговать Comp2 из Comp1, но отсутствует связь с интернетом.
- Установленные правила iptables: Вы неоднократно пробовали различные конфигурации iptables, которые не приносили результата.
- Параметр пересылки пакетов: Вы подтвердили, что
net.ipv4.ip_forward
установлен в 1, что позволяет системе пересылать пакеты.
Ваша текущая конфигурация iptables
Вы привели список правил, которые вы пытались настроить. Однако, в ваших правилах есть несколько недочетов. Хотя на первый взгляд возможно кому-то покажется, что вы правильно охватываете NAT и пересылку, есть нюансы, которые могли бы помочь вам полностью восстановить доступ к интернету.
Основные моменты для проверки и настройки
-
IP-адреса в правилах:
В ваших правилах вы несколько раз использовали192.168.0.123
в качестве выходящего интерфейса. Вместо этого, согласно вашей схеме, это IP-адрес вашего Raspberry Pi на беспроводном интерфейсе (wlan0). Вы должны будете использовать интерфейс, а не IP-адрес.Например, в правилах NAT вы должны указать интерфейс, который используется для выхода в интернет:
sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE sudo iptables -A FORWARD -i wlan0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT sudo iptables -A FORWARD -i eth0 -o wlan0 -j ACCEPT
Пожалуйста, замените
wlan0
на правильный интерфейс выхода (например, eth0 или wlan0, в зависимости от вашей конфигурации). -
Проверка соединения с интернетом:
Убедитесь, что Raspberry Pi визуализирует интернет. Попробуйте на Pi выполнить:ping 8.8.8.8
Если этот пинг не проходит, проблема может заключаться в конфигурации сети или маршрутизации, а не только в iptables.
-
Проверка DNS:
Если пинг на IP (например, 8.8.8.8) проходит, но вы не можете выполнить пинг по доменному имени (например, ping google.com), возможно, вам нужно настроить DNS-серверы в/etc/resolv.conf
. Вы можете добавить следующие строки:nameserver 8.8.8.8 nameserver 8.8.4.4
-
Проверка маршрутов:
Проверьте, что ваш Raspberry Pi имеет корректные маршруты, используя команду:ip route
Убедитесь, что основной маршрут ведет к вашему роутеру (например,
default via 192.168.1.99
). -
Политики по умолчанию:
Убедитесь, что политики по умолчанию разрешают трафик:sudo iptables -P INPUT ACCEPT sudo iptables -P OUTPUT ACCEPT sudo iptables -P FORWARD ACCEPT
Заключение
Проблема может быть вызвана несколькими факторами, начиная от неправильно настроённых iptables до проблем с маршрутизацией или DNS. Пройдите последовательно по приведённым выше шагам, и это поможет вам выявить источник проблемы. Если после всех проверок всё ещё будут трудности, не стесняйтесь сообщить мне об этом. Удачи с вашим проектом!