Виртуальная частная сеть - PPP поверх SSH
Материал из YourcmcWiki
Когда VPN-доступа куда-нибудь нет, или когда наоборот — он есть, но работает так, что пользоваться им не хочется, а VPN иметь хочется — можно воспользоваься протоколом «точка-точка» (PPP — Point-to-Point Protocol), собственно и предназначенным для создания канала между двумя компьютерами, а в сочетании с IP Forwarding — и подсетями, запущенным поверх SSH-канала.
Установка соединения
Необходимые условия для установки шифрованного канала через PPP поверх SSH:
- Очевидно, необходима Linux/UNIX система. :-) на самом деле, можно это сделать и под виндами, но я эту возможность не рассматриваю.
- Иметь возможность соединиться по SSH с машиной, находящейся в целевой подсети. Если обе машины находятся за NAT’ом, можно пробросить ssh через третью машину, имеющую публичный IP, используя SSH Remote Port Forwarding (см. man ssh, опция -R).
- Установить pppd.
-
apt-get install pppd
-
- Запустить соединение PPP через SSH:
-
sudo pppd proxyarp nomppe updetach noauth pty "ssh USER@SERVER [-p PORT] sudo pppd proxyarp nodetach nomppe notty noauth" LOCAL_IP:PTP_IP
- USER — имя пользователя ssh.
- PORT — порт ssh (необязательно, обычно 22).
- SERVER — сервер ssh.
- LOCAL_IP — локальный IP для сетевого интерфейса PPP.
- PTP_IP — удалённый IP для протокола PPP (point-to-point), его получит PPP-интерфейс на машине, с которой соединяемся.
-
- Включить IP Forwarding на обеих машинах — точнее, на машине, от которой требуется проброс всей подсети. То есть если вы хотите ходить из дома в рабочую сеть, на рабочей машине IP Forwarding включать нужно, а на домашней — не обязательно.
-
echo 1 > /proc/sys/net/ipv4/ip_forward
-
echo 1 > /proc/sys/net/ipv4/conf/ppp0/forwarding
-
- Включить Proxy ARP на обеих машинах на интерфейсе PPP (вероятно, ppp0), и на той машине, от которой требуется проброс подсети, на всех нужных сетевых интерфейсах:
-
echo 1 > /proc/sys/net/ipv4/conf/ppp0/proxy_arp
-
echo 1 > /proc/sys/net/ipv4/conf/eth0/proxy_arp
-
- Добавить правила маршрутизации трафика к пробрасываемым подсетям через интерфейсы PPP на соответствующих машинах:
- Например,
route add -net 172.29.0.0/22 dev ppp0
(172.29.0.0/22 — необходимая подсеть)
- Например,
В качестве примера можно обратиться к скриптам из ~s: ~/s/vpn-pppssh и ~/s/vpn-home-custis.