Перевод сборника команд Unix ToolBox. Часть 10 VPN через SSH

491

И снова возвращаюсь к публикации перевода сборника команд Unix ToolBox. Сегодня предлагаю главу, касающуюся команд применяемых при передаче данных с помощью зашифрованных туннелей и прочих технологий SSH. Это как металлические двери в наших квартирах. Главная задача этой технологии — обеспечить защиту нашей информации. Причем речь пойдет не только о командах, но и настройке конфигурационных файлов.

VPN через SSH

С версии 4.3, OpenSSH поддерживает устройства tun/tap, позволяющие создавать шифрованный туннель. Это очень похоже на OpenVPN, основанный на TLS. Плюс протокола SSH в том, что для реализации не нужно устанавливать и настраивать дополнительный софт. Из минусов, низкая производительность на медленных линиях.

Шифрованный туннель создается на основе одного TCP соединения, что весьма удобно, для быстрого поднятия простого VPN, на IP.

В конфигурационном файле sshd_conf, должны стоять следующие опции:

PermitRootLogin yes
PermitTunnel yes

Одно P2P (peer to peer — точка точка) соединение

Попробуем соединить два хоста p2p_client и p2p_server. Соединение инициирует p2p_client к p2p_server, при этом он должен обладать правами root. Конечные адреса туннеля 10.0.0.1 (сервер) и 10.0.0.2 (клиент), кроме того мы создаем устройство tun5 ( номер может быть любым ). Вся процедура проста:

  • Подключиться по SSH используя опцию -w
  • Сконфигурировать IP адреса туннеля, ssh сервер — ssh клиент

Конфигурация SSH сервера

Подключение инициирует ssh клиент, все команды выполняются на сервере.

Сервер на Linux
cli># ssh -w5:5 root@p2p_server
srv># ifconfig tun5 10.0.1.1 netmask 255.255.255.252 # Выполняется в оболочке сервера
Сервер на FreeBSD
cliуте# ssh -w5:5 root@p2p_server
sуrvук# ifconfig tun5 10.0.1.1 10.0.1.2 # Выполняется в системной оболочке сервера
Конфигурирование SSH клиента

Команды выполняемые на ssh клиенте:

cli># ifconfig tun5 10.0.1.2 netmask 255.255.255.252 # SSH клиент на Linux
cli># ifconfig tun5 10.0.1.2 10.0.1.1 # SSH клиент на FreeBSD

Теперь хосты соединены и могут обмениваться информацией, используя IP адреса туннеля.

Соединение двух сетей

Более полезная возможность SSH, соединение двух сетей, используя два шлюза. Предположим, есть две сети, сеть А с адресом 192.168.51.0/24 и сеть Б с адресом 192.168.16.0/24. Процедура идентична вышеописанной, за исключением того, что нужно будет добавить маршрут.
192.168.51.0/24 (сеть A)|шлюз A шлюз Б|192.168.16.0/24 (сеть Б)

  • Подключится через SSH с опцией -w.
  • Настройка IP адреса SSH туннеля, делается единожды, на сервере и на клиенте.
  • Добавить маршрут для обоих сетей.
  • Если нужно, включить NAT на внутреннем интерфейсе шлюза.

Подключение из сети А к сети сети Б

Соединение начинается со шлюза А, команды выполняются на шлюзе Б.

шлюз Б на Linux
gateA># ssh -w5:5 root@gateB
gateB># ifconfig tun5 10.0.1.1 netmask 255.255.255.252 # Выполняется в оболочке шлюза Б
gateB># route add -net 192.168.51.0 netmask 255.255.255.0 dev tun5
gateB># echo 1 > /proc/sys/net/ipv4/ip_forward # Необходимо только если шлюз не Default Gateway
gateB># iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
шлюз Б на FreeBSD
gateA># ssh -w5:5 root@gateB # Создаем устройство tun5
gateB># ifconfig tun5 10.0.1.1 10.0.1.2 # Выполняется на шлюзе Б
gateB># route add 192.168.51.0/24 10.0.1.2
gateB># sysctl net.inet.ip.forwarding=1 # Необходимо только если шлюз не Default Gateway
gateB># natd -s -m -u -dynamic -n fxp0 # Смотри NAT
gateA># sysctl net.inet.ip.fw.enable=1
Настройка шлюза А

Команды выполняемые на шлюзе А:

шлюз A на Linux
gateA># ifconfig tun5 10.0.1.2 netmask 255.255.255.252
gateA># route add -net 192.168.16.0 netmask 255.255.255.0 dev tun5
gateA># echo 1 > /proc/sys/net/ipv4/ip_forward
gateA># iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
шлюз A на FreeBSD
gateA># ifconfig tun5 10.0.1.2 10.0.1.1
gateA># route add 192.168.16.0/24 10.0.1.2
gateA># sysctl net.inet.ip.forwarding=1
gateA># natd -s -m -u -dynamic -n fxp0
gateA># sysctl net.inet.ip.fw.enable=1

В итоге имеет две частные сети, прозрачно соединенные через SSH VPN. Перенаправление IP и настройки NAT необходимы только если шлюзы не являются шлюзами по умолчанию (в этом случае клиент не будет знать, куда пересылать ответы).