Вопрос или проблема
Я пытаюсь создать ssh VPN (через порт 443), чтобы обойти NAT и фильтрацию. Я использую этот учебник. Операционная система – Debian testing на обеих сторонах.
Туннельные устройства созданы на обеих сторонах, и адреса назначены.
Команда ssh (как root на машине B): ssh -w 0:0 MACHINE_A_PUBLIC_IP -p 443
Открывается оболочка для root
На сервере (машина A) параметр PermitTunnel установлен в yes, а cat /proc/sys/net/ipv4/ip_forward
возвращает 1
машина A:
ip link set tun0 up
ip addr add 10.0.0.100/32 peer 10.0.0.200 dev tun0
машина B:
ip link set tun0 up
ip addr add 10.0.0.200/32 peer 10.0.0.100 dev tun0
результат:
машина A:
36: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 500
link/none
inet 10.0.0.100 peer 10.0.0.200/32 scope global tun0
valid_lft forever preferred_lft forever
inet6 fe80::9210:8322:2382:e696/64 scope link flags 800
valid_lft forever preferred_lft forever
машина B:
32: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 500
link/none
inet 10.0.0.200 peer 10.0.0.100/32 scope global tun0
valid_lft forever preferred_lft forever
inet6 fe80::bd70:5f4d:c8f5:aa2c/64 scope link flags 800
valid_lft forever preferred_lft forever
Почему я не могу отправлять пинги?
Мне чего-то явно не хватает при устранении неполадок?
Не может ли это как-то быть связано с фильтром, за которым я нахожусь?
редактировать:
на машине A (сервер) ip route
:
default via 192.168.1.1 dev eth1 proto static metric 100
10.0.0.200 dev tun0 proto kernel scope link src 10.0.0.100
192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.126 metric 100
192.168.100.0/24 dev virbr1 proto kernel scope link src 192.168.100.1 linkdown
192.168.105.0/24 dev virbr4 proto kernel scope link src 192.168.105.1 linkdown
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1
239.0.0.0/8 dev lo scope link
на машине B (клиент) ip route
:
default via 192.168.1.1 dev wlp3s0 proto static metric 600
10.0.0.100 dev tun0 proto kernel scope link src 10.0.0.200
169.254.0.0/16 dev wlp3s0 scope link metric 1000
192.168.1.0/24 dev wlp3s0 proto kernel scope link src 192.168.1.136 metric 600
на машине B (клиент) ping 10.0.0.100
:
PING 10.0.0.100 (10.0.0.100) 56(84) bytes of data.
^C
--- 10.0.0.100 ping statistics ---
10 packets transmitted, 0 received, 100% packet loss, time 9000ms
вывод ping
такой же и на сервере. Они могут пинговать свои собственные интерфейсы (машина B может пинговать 10.0.0.200), (машина A может пинговать 10.0.0.100)
В клиенте ssh_config:
Tunnel point-to-point
В сервере sshd_config:
PermitTunnel point-to-point
Затем установите подключение одной командой на клиенте:
ssh \
-o PermitLocalCommand=yes \
-o LocalCommand="sudo ifconfig tun5 192.168.42.2 pointopoint 192.168.42.1 netmask 255.255.255.0" \
-o ServerAliveInterval=60 \
-w 5:5 [email protected] \
'sudo ifconfig tun5 192.168.42.1 pointopoint 192.168.42.2 netmask 255.255.255.0; echo tun5 ready'
Вы можете завершить с помощью ctrl-c.
Ответ или решение
Когда вы настраиваете SSH-туннель для маршрутизации трафика между двумя устройствами, и не можете пинговать одно устройство с другого, существует несколько ключевых аспектов, которые следует проверить. Рассмотрим вашу конфигурацию более подробно и выявим возможные проблемы.
1. Проверка конфигурации туннелирования SSH
SSH команда:
ssh -w 0:0 MACHINE_A_PUBLIC_IP -p 443
Ваша команда запрашивает создание туннеля между machine A
и machine B
. Убедитесь, что на обоих устройствах корректно настроены конфигурации SSH:
- На сервере, в
sshd_config
, у вас должно быть:PermitTunnel yes
- На клиенте, в
ssh_config
, у вас должно быть:Tunnel point-to-point
2. Настройка устройства TUN
Рассмотрим ваши настройки интерфейсов TUN на обоих устройствах:
На machine A:
ip link set tun0 up
ip addr add 10.0.0.100/32 peer 10.0.0.200 dev tun0
На machine B:
ip link set tun0 up
ip addr add 10.0.0.200/32 peer 10.0.0.100 dev tun0
Убедитесь, что интерфейсы TUN активированы и правильно настроены.
3. Состояние маршрутизации
Проверим маршруты на обоих устройствах.
На machine A:
ip route
Должно быть видно, что трафик для 10.0.0.200
идет через tun0
.
На machine B:
ip route
Точно так же должно быть указано, что трафик для 10.0.0.100
отправляется через tun0
.
4. Настройка прокси и NAT
Проблемы с маршрутизацией и фильтрацией могут возникнуть из-за NAT либо с учетом специфических правил с файрволлом (например, iptables
):
- Проверьте настройки
iptables
на обоих устройствах. Возможно, правила блокируют ICMP (что отвечает за пинг).
iptables -L -v -n
Убедитесь, что у вас есть разрешение для ICMP-трафика.
5. Проверка сетевого соединения
Вы можете выполнить несколько тестов для диагностики связи:
-
Проверьте, можете ли вы пинговать локальные адреса:
ping 10.0.0.100
сmachine B
.ping 10.0.0.200
сmachine A
.
-
Если вы можете пинговать эти адреса, значит, туннель работает, и проблема может заключаться в фильтрации ICMP.
6. Логи и состояние соединения
Проверьте журналы SSH на стороне сервера (/var/log/auth.log
или /var/log/secure
) на наличие ошибок или предупреждений, связанных с туннелем или сетевыми соединениями. Это может помочь идентифицировать скрытые проблемы.
7. Проверка фильтрации
Если вы действительно за NAT или имеете фильтрующий прокси, вам следует проверить настройки там. Возможно, некоторые типы трафика (например, ICMP) блокируются. Попробуйте временно отключить NAT или фильтры для тестирования.
Заключение
Подводя итог, для решения проблемы с пингом между двумя устройствами через SSH-туннель необходимо:
- Проверить настройки SSH и параметры конфигурации туннелей.
- Убедиться в правильности настройки маршрутов.
- Проверить настройки файрволла и NAT.
- Анализировать логи для обнаружения возможных ошибок.
Следуя этим шагам, вы сможете диагностировать и устранить проблему с соединением между вашими машинами.