С версии 4.3, OpenSSH поддерживает устройства tun/tap, позволяющие создавать шифрованный туннель. Это очень похоже на OpenVPN, основанный на TLS. Плюс SSH в том, что для реализации не нужно устанавливать и настраивать дополнительный софт. Из минусов, низкая производительность на медленных линиях.
Шифрованный туннель создается на основе одного TCP соединения, что весьма удобно, для быстрого поднятия простого VPN, на IP.
В конфигурационном файле sshd_conf, должны стоять следующие опции:
PermitRootLogin yes PermitTunnel yes
Сервер на 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 srv># ifconfig tun5 10.0.1.1 10.0.1.2 # Выполняется в оболочке сервера
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 (сеть Б)
Соединение начинается со шлюза А, команды выполняются на шлюзе Б.
шлюз Б на 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 # Смотри NAT gateA># sysctl net.inet.ip.fw.enable=1В итоге имеет две частные сети, прозрачно соединенные через SSH VPN. Перенаправление IP и настройки NAT необходимы только если шлюзы не являются шлюзами по умолчанию (в этом случае клиент не будет знать, куда пересылать ответы).