LINUX.ORG.RU

Разрешить доступ к vps по ssh с произвольного адреса при включенном на vps vpn-клиенте

 , , ,


0

1

Имеется купленный vps c ubuntu 20.04 от ovh в Германии. Также имеется купленный nordvpn который с недавних пор РКН начал блокировать в России с переменным успехом.

Сам vpn в общем-то так и работает без особых проблем (точнее не все протоколы, не везде и не всегда, но это уже частности), но фактически не работает их proxy-extension для браузера причем аккурат после того как началась активная блокировка tor, а не самого nordvpn, а т.к. мне vpn нужен пока в основном только для интернет-серфинга, я купил vps-ку за пределами РФ, у себя на клиенте я буду поднимать socks5-ssh-proxy прописывая его в браузере, подключаясь к vps по ssh (т.е socks трафик до vps будет завернут в ssh туннель) а уже с vps буду подключаться к nordvpn.

В общем то все хорошо, за исключением того, что при поднятом на vps подключении к nordvpn к самой vps уже нельзя подключится по ssh т.к. по умолчанию блокируются входящие соединения.

Сейчас на vps работает ufw со следующими правилам

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
sshport/tcp (SSH-custom)     LIMIT IN    Anywhere                  
Anywhere                   ALLOW IN    myremoteclinetstaticip             

где sshport это ssh поднятый на нестандартном порту myremoteclinetstaticip - адрес моего основного ПК с которого я обычно подключаюсь к vps по ssh

Таким образом без включенного на vps vpn любой клиент может подключаться по порту ssh, а я со своей основной машины могу подключаться к vps вообще по любому порту без ограничений. Однако при включенном nordvpn на vps ssh связь обрывается.

Официальный клиент nordvpn предоставляет https://support.nordvpn.com/Connectivity/Linux/1325531132/Installing-and-usin... возможность добавлять адреса и/или порты, чтобы при включенном vpn по ним можно было все-равно подключаться к устройству.

При добавлении адреса моеuj основного ПК myremoteclinetstaticip ssh на vps с него становится доступен даже с подключенным на vps nordvpn

Technology: NORDLYNX
Firewall: enabled
Kill Switch: enabled
CyberSec: disabled
Notify: disabled
Auto-connect: disabled
IPv6: disabled
DNS: disabled
Whitelisted ports:
          sshport (TCP)
Whitelisted subnets:
        myremoteclinetstaticip/32

однако доступ по порту ssh с любого другого произвольного клиента или с моего ПК если убрать его адрес из вайтлиста не работает причем именно на vps т.к. я попробовал сделать все тоже-самое на локальной вм virtualbox и там достаточно указать порт ssh в whitelist nordvpn чтобы разрешить доступ только gj ssh любому клиенту (т.е. адрес клиента добавлять в вайтлист уже не обязательно).

фактически команда

nordvpn whitelist add subnet myremoteclinetstaticip/32

создаёт на vps 1) роут вида

myremoteclinetstaticip via шлюз_по_умочанию_vps dev имя_сетевого_интерфейса
2) правила в IPTABLES в цепочках Chain INPUT (policy DROP) и Chain OUTPUT (policy ACCEPT) соответственно
ACCEPT     all  --  myremoteclinetstaticip  anywhere 
ACCEPT     all  --  anywhere           myremoteclinetstaticip 

в свою очередь команда

nordvpn whitelist add port sshport protocol TCP
создает добавляет в iptables правила в цепочках Chain INPUT (policy DROP) и Chain OUTPUT (policy ACCEPT) соответственно
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:sshport
ACCEPT     tcp  --  anywhere             anywhere             tcp spt:sshport

ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:sshport
ACCEPT     tcp  --  anywhere             anywhere             tcp spt:sshport

при этом на локальной виртуалке, где все работает как надо конечное содержимое iptables точно такое же как и на vps за исключением ip адресов, поэтому я предположил, что возможно дело в маршрутах Из того, что я нашел https://superuser.com/questions/1608801/using-wireguard-to-essentially-give-a... для wireguard (а на vps к norvpn я подключаюсь через nordlynx==wireguard) действительно для сохранения ssh необходимо прописать дополнительные настройки примерно такого вида

ip rule add preference 102 to 44.44.44.44 iif eth0 ipproto tcp dport 22 lookup local
ip rule add preference 103 from 44.44.44.44 iif lo ipproto tcp sport 22 lookup main
но сделав все по аналогии за исключением имени сетевого интерфейса и ip у меня все равно не заработал доступ по ssh при включенном vpn и я не знаю что еще можно попробовать

сделал tcpdump на vps от хоста откуда пытаюсь подключиться к vps на vps видно, что обращения от клиента прилетают, но ответа на них от самого vps нет

tcpdump: listening on имя_интерфейса, link-type EN10MB (Ethernet), capture size 262144 bytes
17:10:24.796571 IP (tos 0x0, ttl 48, id 53460, offset 0, flags [DF], proto TCP (6), length 60)
    адрес_откуда_подключаюсь.10407 > имя_vps.sshport: Flags [S], cksum 0xaaff (correct), seq 2749862871, win 64240, options [mss 1460,sackOK,TS val 491584064 ecr 0,nop,wscale 7], length 0
E..<..@.0..,..o".}.\(..a.......................
.L.@........

также включал full-логи ufw там такие записи

Feb  5 10:53:21 имя_vps kernel: [52278.088516] [UFW AUDIT] IN= OUT=имя_сетевого_интерфейса_VPN SRC=адрес_vps DST=адрес_клиента LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=0 DF PROTO=TCP SPT=порт_ssh DPT=10417 WINDOW=64296 RES=0x00 ACK SYN URGP=0 

Что куда нужно прописать, чтобы разрешить доступ по ssh к vps с любого адреса при включенном vpn?


интерфейсы и маршруты до подключения vpn

default via vps_gareway_ip dev ens3 proto dhcp src public_ip_vps metric 100 
vps_gareway_ip  dev ens3 proto dhcp scope link src public_ip_vps metric 100 



1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether vps_mac brd ff:ff:ff:ff:ff:ff
    inet public_ip_vps/32 scope global dynamic ens3
       valid_lft 86348sec preferred_lft 86348sec



после включения vpn
0.0.0.0/1 via 10.5.0.2 dev nordlynx 
default via vps_gareway_ip  dev ens3 proto dhcp src public_ip_vps metric 100 
nordvpn_serverip via vps_gareway_ip  dev ens3 
my_remote_pcip via vps_gareway_ip  dev ens3 
128.0.0.0/1 via 10.5.0.2 dev nordlynx 
vps_gareway_ip  dev ens3 proto dhcp scope link src public_ip_vps metric 100 


1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether vps_mac brd ff:ff:ff:ff:ff:ff
    inet public_ip_vps/32 scope global dynamic ens3
       valid_lft 86348sec preferred_lft 86348sec
4: nordlynx: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
    link/none 
    inet 10.5.0.2/32 scope global nordlynx
       valid_lft forever preferred_lft forever

tm4ig
() автор топика
Ответ на: комментарий от tm4ig
ip route add table 200 default via vps_default_gateway
и
ip rule add table 200 from vps_publin_ip
или
ip rule add table 200 from vps_publin_ip ipproto tcp sport vps_ssh_port

вроде так работает

tm4ig
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.