Вопрос или проблема
У меня есть локальная сеть с сервером Proxmox, работающим на WireGuard (192.168.3.233) в контейнере Debian. В этой сети у меня есть ПК с Windows (192.168.3.167), к которому я хотел бы подключиться через RDP с моего удаленного ПК (192.168.3.251, интерфейс WireGuard). Когда ПК находятся в одной локальной сети, я могу отправлять ping-запросы от одного к другому. Однако, как только я подключаю удаленный ПК через WireGuard, другие хосты не могут разрешить адрес (192.168.3.251).
Вот моя конфигурация WireGuard на Proxmox:
[Interface]
Address = 192.168.3.250/24
SaveConfig = true
PostUp = iptables -A FORWARD -i wg0 -o eth0 -j ACCEPT
PostUp = iptables -A FORWARD -i eth0 -o wg0 -j ACCEPT
PostUp = iptables -A INPUT -i wg0 -p icmp -j ACCEPT
PostUp = iptables -A INPUT -i wg0 -p tcp --dport 3389 -j ACCEPT
PostUp = iptables -A INPUT -s 192.168.3.167 -p icmp --icmp-type echo-request -j ACCEPT
PostUp = iptables -A INPUT -s 192.168.3.167 -p tcp --dport 3389 -j ACCEP
PostUp = iptables -A INPUT -i eth0 -p icmp --icmp-type echo-request -j ACCEPT
PostUp = iptables -A INPUT -i eth0 -p tcp --dport 3389 -j ACCEPT
PostDown = iptables -D FORWARD -i wg0 -o eth0 -j ACCEPT
PostDown = iptables -D FORWARD -i eth0 -o wg0 -j ACCEPT
PostDown = iptables -D INPUT -i wg0 -p icmp -j ACCEPT
PostDown = iptables -D INPUT -i wg0 -p tcp --dport 3389 -j ACCEPT
PostDown = iptables -D INPUT -s 192.168.3.167 -p icmp --icmp-type echo-request -j ACCEPT
PostDown = iptables -D INPUT -s 192.168.3.167 -p tcp --dport 3389 -j ACCEPT
PostDown = iptables -D INPUT -i eth0 -p icmp --icmp-type echo-request -j ACCEPT
PostDown = iptables -D INPUT -i eth0 -p tcp --dport 3389 -j ACCEPT
ListenPort = 51820
PrivateKey =
[Peer]
PublicKey =
AllowedIPs = 192.168.3.251/32
Вот моя удаленная конфигурация:
[Interface]
PrivateKey =
Address = 192.168.3.251/32
MTU = 1420
DNS = 1.1.1.1
[Peer]
PublicKey =
AllowedIPs = 192.168.3.167/32
Endpoint = x.duckdns.org:51820
PersistentKeepalive = 21
Вот tcpdump на Proxmox:
19:09:16.635180 IP (tos 0x0, ttl 128, id 41345, offset 0, flags [none], proto ICMP (1), length 60)
192.168.3.251 > 192.168.3.167: ICMP echo request, id 1, seq 29, length 40
19:09:16.635438 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.3.251 tell 192.168.3.233, length 28
Есть идеи, почему удаленный адрес не разрешается? Буду очень признателен за помощь, я и ChatGPT уже некоторое время пытаемся разобраться.
Я пробовал много различных конфигураций iptables, разные хосты и т. д. Но похоже, что ничего не работает. Я не нахожу людей, которые пробовали бы точно то же самое, чтобы следовать их руководствам.
Ответ или решение
Решение проблемы с доступом к удаленному адресу из локальной сети при использовании WireGuard
Ваша ситуация описывает проблему с доступом к компьютеру в локальной сети (192.168.3.167) с удаленного ПК (192.168.3.251), когда последний подключен через WireGuard. Из вашего описания видно, что ICMP-запросы (ping) не проходят от удаленного ПК, что указывает на возможные проблемы в конфигурации маршрутизации или в правилах iptables. Рассмотрим решение этой проблемы подробнее.
Анализ конфигурации WireGuard
Конфигурация Proxmox
Ваша конфигурация WireGuard на Proxmox выглядит следующим образом:
- [Interface] секция настроена правильно с заданным IP-адресом для интерфейса WireGuard.
- PostUp и PostDown правила имеют смысл; однако, есть некоторые недоработки, которые требуют внимания:
- Проблема заключается в том, что вы добавляете правила для ICMP и TCP только для локального IP 192.168.3.167. Это может привести к проблемам с маршрутизацией пакетов от удаленного ПК к указанному IP.
- Также настройки
AllowedIPs
для пира (Peer) на удаленной конфигурации допускают только IP 192.168.3.167, что может блокировать трафик.
Конфигурация удаленного ПК
Параметры удаленного клиента также требуют корректировки:
- AllowedIPs = 192.168.3.167/32: это значит, что удаленный клиент сможет обмениваться данными только с 192.168.3.167. Попробуйте изменить это на AllowedIPs = 192.168.3.0/24, чтобы разрешить доступ к другим IP в вашей локальной сети.
Рекомендации для настройки iptables
Рекомендуется внести следующие изменения в конфигурацию iptables на Proxmox для улучшения маршрутизации:
PostUp = iptables -A FORWARD -i wg0 -o eth0 -j ACCEPT
PostUp = iptables -A FORWARD -i eth0 -o wg0 -j ACCEPT
PostUp = iptables -A INPUT -i wg0 -p icmp -j ACCEPT
PostUp = iptables -A INPUT -i wg0 -p tcp --dport 3389 -j ACCEPT
PostUp = iptables -A INPUT -s 192.168.3.0/24 -p icmp -j ACCEPT
PostUp = iptables -A INPUT -s 192.168.3.0/24 -p tcp --dport 3389 -j ACCEPT
И не забудьте удалить все специфические правила для 192.168.3.167, чтобы не создавать задержек в маршрутизации пакетов.
Проверка маршрутизации и сетевых соединений
-
Тестирование сети:
- Убедитесь, что ваш удаленный ПК может пинговать другие устройства в локальной сети (например, Proxmox 192.168.3.233 или любой другой IP).
- Используйте команду
traceroute
для изучения маршрута пакетов от удаленного ПК до компьютера Windows.
-
Логи и диагностика:
- Проверьте логи WireGuard для получения дополнительной информации о подключении и попытках установить соединение.
- Выполните
tcpdump
на интерфейсе WireGuard, чтобы следить за входящими и исходящими соединениями.
Заключение
Ваша проблема с доступом к удаленному компьютеру из локальной сети при использовании WireGuard может быть устранена путем настройки правил маршрутизации и iptables. Внесение изменений в конфигурации WireGuard и корректировка параметров AllowedIPs помогут обеспечить корректный обмен данными между удаленным ПК и локальной сетью. Не забывайте про регулярную проверку сетевых подключений и анализ логов для более глубокого понимания текущих проблем.
Если у вас возникнут дополнительные вопросы или потребуется дальнейшая поддержка, не стесняйтесь обращаться!