Виртуальная частная сеть - PPP поверх SSH

Материал из YourcmcWiki
Версия от 14:08, 4 сентября 2009; VitaliyFilippov (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Когда 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.