Вопрос или проблема
Моя настройка такая,
Дома у меня работает сервер wireguard vpn с только IPv6.
В облаке у меня есть двухстековый VPS сервер на Ubuntu с запущенным socat как ниже,
sudo socat UDP4-RECVFROM:51820,fork UDP6-SENDTO:[<мой домашний IPv6 адрес wg сервера>]:51820
Сейчас я вне дома только с сетью IPv4.
На моем iPhone я установил VPN (используя wg клиент) домой, используя адрес VPN сервера как выше на VPS публичный IPv4 адрес. И я могу успешно получить доступ ко всей моей локальной сети. Я могу использовать ssh для доступа к моим домашним серверам, используя LAN IP адрес. Я могу получить доступ к страницам моего маршрутизатора и коммутатора через браузер по LAN IP адресу. В общем, всё хорошо здесь.
На моем другом компьютере Ubuntu (который в той же сети, что и вышеупомянутый iPhone), я смог успешно установить VPN. Я могу успешно пинговать устройства в локальной сети, используя LAN IP адрес. Я попытался telnet <lan ip> <ssh port>
и он показал, что подключение установлено.
Но я не могу использовать ssh для подключения к серверам, используя LAN IP, или получить доступ к страницам маршрутизатора или коммутатора через браузер. Оно просто крутится.
Вот подробные журналы при попытке ssh,
ubuntu@ubuntu-server:~$ sudo wg show
interface: wg0
public key: xxxxxxxxxxxxxxx
private key: (hidden)
listening port: 56404
fwmark: 0xca6c
peer: xxxxxx
preshared key: (hidden)
endpoint: xxxx:51820
allowed ips: 0.0.0.0/0, ::/0
latest handshake: 4 seconds ago
transfer: 22.45 KiB received, 102.66 KiB sent
ubuntu@ubuntu-server:~$ ping 192.168.0.195
PING 192.168.0.195 (192.168.0.195) 56(84) bytes of data.
64 bytes from 192.168.0.195: icmp_seq=1 ttl=63 time=38.9 ms
64 bytes from 192.168.0.195: icmp_seq=2 ttl=63 time=39.1 ms
^C
ubuntu@ubuntu-server:~$ telnet 192.168.0.195 xx
Trying 192.168.0.195...
Connected to 192.168.0.195.
Escape character is '^]'.
SSH-2.0-OpenSSH_9.2p1 Debian-2+deb12u4
^C
Connection closed by foreign host.
ubuntu@ubuntu-server:~$ ssh -v -i .ssh/puttykey.ppk -p xxx [email protected]
OpenSSH_9.6p1 Ubuntu-3ubuntu13.5, OpenSSL 3.0.13 30 Jan 2024
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files
debug1: /etc/ssh/ssh_config line 21: Applying options for *
debug1: Connecting to 192.168.0.195 [192.168.0.195] port xxx.
debug1: Connection established.
debug1: identity file .ssh/puttykey.ppk type -1
debug1: identity file .ssh/puttykey.ppk-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_9.6p1 Ubuntu-3ubuntu13.5
debug1: Remote protocol version 2.0, remote software version OpenSSH_9.2p1 Debian-2+deb12u4
debug1: compat_banner: match: OpenSSH_9.2p1 Debian-2+deb12u4 pat OpenSSH* compat 0x04000000
debug1: Authenticating to 192.168.0.195:868 as 'pi'
debug1: load_hostkeys: fopen /home/ubuntu/.ssh/known_hosts2: No such file or directory
debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts: No such file or directory
debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts2: No such file or directory
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: algorithm: [email protected]
debug1: kex: host key algorithm: ssh-ed25519
debug1: kex: server->client cipher: [email protected] MAC: <implicit> compression: none
debug1: kex: client->server cipher: [email protected] MAC: <implicit> compression: none
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
Точно такая же проблема и на компьютере с Windows (который также находится в той же сети, что и вышеупомянутый iPhone).
Какие-нибудь мысли?
Ответ или решение
Проблема, описанная в вашей ситуации, указывает на то, что несмотря на успешное установление подключения через WireGuard VPN и возможность пинговать устройства в локальной сети и подключаться к ним через Telnet, подключение по SSH с вашего компьютера Ubuntu или компьютера Windows оказывается безуспешным. Давайте попробуем более подробно разобраться в возможных причинах этой ситуации и приложим соответствующие решения.
Теория
WireGuard – это современный VPN-протокол, который отличается простотой в настройке и высокой производительностью. Основное назначение VPN состоит в том, чтобы обеспечить безопасный туннель для передачи данных между вашим устройством и удаленной сетью. Однако в данный момент в вашей конфигурации происходит следующее:
- VPN интеграция: WireGuard успешно соединяет устройство (iPhone и ваш компьютер Ubuntu или Windows) с вашей домашней сетью через сервер WireGuard, запущенный в локальной сети.
- Туннелирование IPv4 и IPv6: Поскольку ваш домашний сервер WireGuard работает только с IPv6, а вы подключаетесь к нему через VPS с использованием socat для направления трафика с IPv4 на IPv6, это может создавать некоторые ограничения с маршрутизацией трафика или сопоставлением NAT.
- Сетевая конфигурация: Поскольку вы успешно получаете ответ от устройств в вашей локальной сети (например, через пинг или Telnet), это указывает на то, что первоначальная установка сети и разрешения IP-адресов работают правильно. Однако, проблемы с SSH указывают на то, что этот трафик может не маршрутизироваться или обрабатываться должным образом по какой-либо причине.
Пример
Проблемы подобного рода наиболее часто связаны с одним или несколькими следующими факторами:
-
Маршрутизация и правила фаерволла: На каждом этапе между вашим устройством и конечной точкой необходим правильный маршрут. Например, детальная проверка маршрутов и любых существующих правил фаерволла на компьютере, VPS и домашнем сервере может выявить разногласия.
-
NAT и двусторонняя связь: Если NAT используется на уровне вашего провайдера или какого-либо посредника в соединении, это может нарушать корректную работу TCP-запросов, которую пинг и Telnet потенциально могут обойти.
-
Конфигурация SSH или протокол анкоровки: Отключение размещения или перенаправление портов может быть неверно настроено либо на целевом сервере, либо на промежуточных узлах.
Применение
-
Проверка маршрутизации:
- Выполните команду
traceroute
с вашего компьютера Ubuntu до домашнего устройства, чтобы увидеть, где происходит обрыв или задержка. - Используйте
ip route
для поиска ошибочных маршрутов, возможно добавьте маршруты вручную для уточнения направлений.
- Выполните команду
-
Просмотр логов и правил фаерволла:
- Проверьте системные логи как на доме, так и на VPS для ошибок, связанных с настроенные маршрутизации или неправильно выполненных соединений SSH.
- Убедитесь, что настройки
iptables
или других фаерволлов не блокируют либо не пересылают SSH-трафик другим образом.
-
Корректировка конфигурации WireGuard:
- Поскольку ваша проблема демонстрирует способность SSH к установке соединения, возможно, потребуется пересмотреть пункты «AllowedIPs» и «PostUp/PostDown» для соответствующего WireGuard интерфейса.
-
Тестирование с другими протоколами:
- Переключитесь на другие протоколы проверки (например, HTTP(S)) с учетом других браузеров или инструментов для выявления, что проблема действительно изолирована к SSH, возможно попробуйте более простое приложение.
-
Устранение проблем с устройствами:
- На целевых устройствах убедитесь, что службы SSH работают корректно без внутренней блокировки или проблем с авторизацией.
Проводя пошаговое устранение проблем, как описано выше, вы сможете лучше диагностировать проблему и найти оптимальное решение для возобновления доступа через SSH. WireGuard и связанные настройки сети могут потребовать нескольких проходов проверки и тюнинга конфигурации для полного устранения текущих проблем.