Skip to content
Опубликовано: 2020-10-19
Теги: linux network ssh

Настройка VPN через SSH

В связи с очередным переходом на режим удаленной работы возникла необходимость воспользоваться сервисом, который доступен только в сети офиса. Полноценного VPN в нашем офисе никогда не было, т.к. всегда хватало пробросов портов для SSH. Настраивать проброс большого количества портов через ssh в этой ситуации не удобно. Поэтому сделал ip-ip тунель и настроил маршрутизацию в офис через него.

Это все заметки основанные на базе записи в ArchWiki.

Подготовка “серверной” стороны

Настройка ssh

В первую очередь надо настроить SSH-сервер. Надо разрешить ему создавать туннель и дать права на управление сетевыми интерфейсами. Можно создать специального пользователя и группу для него, но здесь будет упрощенный вариант c пользователем root. Пользователю root разрешим вход по ключу.

В конфиге ssh /etc/ssh/sshd_config надо установить такие параметры:

...
PermitTunnel yes
PermitRootLogin prohibit-password
...

После перезапустить ssh сервер:

systemctl restart sshd

Ещё надо не забыть разместить отпечаток своего ключа у пользователя root. Если что, то на клиентской машине надо взять содержимое из ~/.ssh/id_ed25519.pub (или своего типа ключа) и поместить его на сервере в /root/.ssh/authorized_key.

Настройка сетевого туннеля

Будет создан туннель с номером 5.

Создаем файл /etc/systemd/network/vpn-over-ssh.netdev:

[NetDev]
Name=tun5
Kind=tun

[Tun]
User=root
Group=root

Создаем файл /etc/systemd/network/vpn-over-ssh.network:

[Match]
Name=tun5

[Address]
Address=192.168.244.1/24

После перезапускаем юнит systemd-networkd.service

systemctl restart systemd-networkd.service

Подключение к серверу

Если вкратце то так:

sudo ssh -fN -w5:5 \
  -o ServerAliveInterval=30 \
  -o ServerAliveCountMax=5 \
  -o TCPKeepAlive=yes \
  -o PermitLocalCommand=yes \
  -o LocalCommand="sudo ip addr add 192.168.244.2 peer 192.168.244.1/24 dev tun5;sudo ip link set up dev tun5;sudo ip route add 10.43.0.0/24 dev tun5" \
  -i ~/.ssh/id_ed25519 \
  -l root \
  -p 5022 \
  my.server.com

Саму команду ssh запускаем через sudo, чтобы были права на создание туннеля.

А теперь подробнее по опциям создаваемого подключения:

Описание выполняемых команд:

Команда sudo ip addr add 192.168.244.2 peer 192.168.244.1/24 dev tun5 добавляет туннелю локальный и удаленный адреса.

Команда sudo ip link set up dev tun5 поднимает туннель, т.к. ssh просто его создает, но не включает.

Команда sudo ip route add 10.43.0.0/24 dev tun5 добавляет маршрут в сеть офиса.