Я больше не могу подключиться к интернету с помощью iptables.

Вопрос или проблема

Добрый день. Вот диаграмма моей домашней сети:

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 и пересылку, есть нюансы, которые могли бы помочь вам полностью восстановить доступ к интернету.

Основные моменты для проверки и настройки

  1. 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, в зависимости от вашей конфигурации).

  2. Проверка соединения с интернетом:
    Убедитесь, что Raspberry Pi визуализирует интернет. Попробуйте на Pi выполнить:

    ping 8.8.8.8

    Если этот пинг не проходит, проблема может заключаться в конфигурации сети или маршрутизации, а не только в iptables.

  3. Проверка DNS:
    Если пинг на IP (например, 8.8.8.8) проходит, но вы не можете выполнить пинг по доменному имени (например, ping google.com), возможно, вам нужно настроить DNS-серверы в /etc/resolv.conf. Вы можете добавить следующие строки:

    nameserver 8.8.8.8
    nameserver 8.8.4.4
  4. Проверка маршрутов:
    Проверьте, что ваш Raspberry Pi имеет корректные маршруты, используя команду:

    ip route

    Убедитесь, что основной маршрут ведет к вашему роутеру (например, default via 192.168.1.99).

  5. Политики по умолчанию:
    Убедитесь, что политики по умолчанию разрешают трафик:

    sudo iptables -P INPUT ACCEPT
    sudo iptables -P OUTPUT ACCEPT
    sudo iptables -P FORWARD ACCEPT

Заключение

Проблема может быть вызвана несколькими факторами, начиная от неправильно настроённых iptables до проблем с маршрутизацией или DNS. Пройдите последовательно по приведённым выше шагам, и это поможет вам выявить источник проблемы. Если после всех проверок всё ещё будут трудности, не стесняйтесь сообщить мне об этом. Удачи с вашим проектом!

Оцените материал
Добавить комментарий

Капча загружается...