Вопрос или проблема
Я пытаюсь постоянно подключить свой ноутбук (на котором установлены Fedora или Manjaro) к Raspberry Pi с PiVPN.
Я настроил IP-таблицы и проброс портов.
Я могу получить доступ к своему Pi по адресу 10.6.0.1, но не к своей нормальной подсети 192.168.0.0/24. На своем мобильном телефоне я могу получить доступ к своей локальной сети с других сетей, но не с ноутбука.
Я сгенерировал файл wg0.conf для WireGuard из PiVPN и поместил его в /etc/wireguard. И он работает. Но я не могу получить доступ к локальной сети. Он должен перенаправлять весь трафик через Pi.
Я пытался добавить больше адресов в Allowed IPs, но это не помогло. Я также добавил IP-таблицы в конфигурационный файл. Это проблема с ОС или WireGuard?
Я также могу пинговать 10.6.0.1 (PI) из другой сети, находясь в подключении через WireGuard, но когда я пытаюсь пинговать 196.168.178.35 (LAN PI), он говорит, что не может достучаться до хоста.
Конфигурационные файлы:
Pi Server:
[Interface]
PrivateKey = <private>
Address = 10.6.0.1/24
MTU = 1420
ListenPort = <port>
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
PublicKey = <pubkey>
PresharedKey = <presharedkey>
AllowedIPs = 10.6.0.4/32
Клиент:
[Interface]
PrivateKey = <privatekey>
Address = 10.6.0.4/24
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
DNS = 10.6.0.1
[Peer]
PublicKey = <publickey>
PresharedKey = <sharedkey>
Endpoint = <my-external-ip>:<port>
AllowedIPs = 0.0.0.0/0
PersistentKeepalive=30
AllowedIPs = 0.0.0.0/0
в вашем клиентском WireGuard конфиге означает, что весь трафик без явного маршрута будет отправляться через этого пира WireGuard. Поэтому вам, вероятно, нужно добавить явный маршрут для адреса LAN вашего Pi (или подсети, в которой он находится).
На своем ноутбуке выполните следующую команду:
$ ip route
Вывод будет выглядеть примерно так:
default via 192.168.0.1 dev eth0 proto dhcp metric 100
10.6.0.0/24 dev wg0 scope link
192.168.0.0/24 dev eth0 proto kernel scope link src 192.168.0.123 metric 100
Если вы не видите маршрута, который относится к адресу LAN вашего Pi, добавьте его, маршрутизируя через шлюз по умолчанию вашего ноутбука; что-то вроде этого:
$ sudo ip route add 192.168.178.0/24 via 192.168.0.1 dev eth0
Несвязано с этим: вы можете удалить правила iptables PostUp/PostDown, которые у вас указаны в вашем клиентском WireGuard конфиге, они вам не нужны (эти правила применяются только на серверах, которые перенаправляют пакеты на другие хосты — вот почему они у вас в конфигурации сервера Pi).
Ответ или решение
Почему WireGuard не обеспечивает доступ к LAN на Linux, в то время как на мобильном устройстве это работает
Вы столкнулись с проблемой, при которой ваш ноутбук на базе Fedora или Manjaro не может получить доступ к локальной сети (LAN) Raspberry Pi, подключенному через WireGuard, в то время как с мобильного телефона доступ осуществляется без проблем. Давайте подробнее рассмотрим возможные причины проблемы и пути её решения.
Обзор конфигурации
Из ваших конфигурационных файлов WireGuard видно, что на сервере Pi и на клиенте (ноутбук) настроены разные IP-адреса и маршруты, что уже может быть источником проблем.
- Сервер (Pi) настраивается на IP-адрес 10.6.0.1 и имеет правила для перенаправления трафика через
iptables
. - Клиент (ноутбук) имеет конфигурацию, которая позволяет переключать весь трафик через WireGuard, но, похоже, не настроен для корректного маршрутизации запросов в локальную сеть.
Основная проблема
Согласно вашей конфигурации, у вас установлен параметр AllowedIPs
на клиентской стороне как 0.0.0.0/0
, что подразумевает отправку всего трафика через сервер WireGuard. Однако, чтобы обеспечить доступ к LAN, необходимо добавить маршрут для соответствующей подсети.
-
Для начала, вам нужно проверить текущие маршруты вашего ноутбука. Введите следующую команду в терминале:
ip route
Вы должны увидеть список маршрутов, и среди них должна быть запись для вашей локальной сети (192.168.0.0/24). Если такой записи нет, это может быть причиной проблемы.
-
Если отсутствуют маршруты, добавьте маршрут к подсети LAN. Пример команды:
sudo ip route add 192.168.0.0/24 via 192.168.0.1 dev eth0
Это указывает системе, что трафик для подсети 192.168.0.0 должен маршрутизироваться через указанный шлюз (192.168.0.1).
Настройки iptables
Также стоит обратить внимание на настройки iptables
на вашем сервере Pi. Проверьте, что правила для FORWARD
и MASQUERADE
корректно применяются. Эти параметры необходимы для переадресации трафика от клиента к локальной сети и обратно.
Удаление ненужных правил
Как было указано в вашем сообщении, вы можете удалить правила в секциях PostUp
и PostDown
на стороне клиента, так как они применяются только на серверных системах, которые пересылают пакеты на другие хосты.
Заключение
Проблемы с доступом к LAN через WireGuard могут быть связаны с маршрутизацией и конфигурацией сетевых правил. Проверьте маршруты на ноутбуке, убедитесь в правильной настройке iptables
и настройте явные маршруты для доступа к вашей локальной сети. По возможности, тестируйте соединение, чтобы убедиться в его стабильности. Обеспечив правильную маршрутизацию и настройки сетевых правил, вы сможете решить проблемы доступа к LAN на вашем Linux-устройстве.