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

0
130

И снова возвращаюсь к публикации перевода сборника команд 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 необходимы только если шлюзы не являются шлюзами по умолчанию (в этом случае клиент не будет знать, куда пересылать ответы).

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here