Соединение 2 локальных сетей с помощью ppp over ssh (ssh ppp network vpn)



Голованов Сергей;[email protected]>
Date: Mon, 14 Jul 2004 13:01:37 +0000 (UTC)

Когда понадобилось соединить 2 локалки без пересборки ядра, я перечитал
много документации. Статья на opennet.ru "Создание VPN GRE тунеля в
Linux" подвигла меня на подобное творение, но про ppp over ssh, т. е.
vpn , но с шифрованием.

Просмотрев много статей по созданию тунелей я к своему удивлению не
нашел ничего о том как быстро и без проблем создать шифрованный тунель
между двумя машинами (сетями) через интернет. И вот решил написать.

Буду предельно краток...
И так, ДАНО:

1. Сеть 192.168.1.0/24 (255.255.255.0) В которой есть машина подключенная
к интернет. Со стороны локальной сети машина имеет IP: 192.168.1.1 (на eth1)
а со стороны инета имеет IP: 100.200.300.400 (на eth0) Назовем эту машину ALPHA.

2. Сеть 192.168.2.0/24 (255.255.255.0) В которой есть машина подключенная
к интернет. Со стороны локальной сети машина имеет IP: 192.168.2.1 (на eth1)
а со стороны инета имеет IP: 400.300.200.100 (на eth0) Назовем эту машину BETTA.

Цель: Надо организовать шифрованный тунель между машинами ALPHA и BETTA,
чтобы компьютеры  одной сети имели доступ к компьютерам в другой сети.
Считаем, что ssh и pppd уже установлен в обоих системах.

На машине ALPHA делаем:
1. Заводим пользователя vpn-user: adduser vpn-user.
Заходим ручками в etc/passwd и приводим строку про этого пользователя к виду:

vpn-user:*:520:520::/home/vpn:/usr/sbin/pppd

2. Настраиваем pppd: в /etc/ppp/options пишем:

ipcp-accept-local
ipcp-accept-remote
proxyarp
noauth

3. Добавляем в etc/crontab строчку:
 * * * * * root /sbin/route add -net 192.168.2.0 gw 192.168.2.19 netmask 255.255.255.0 2>/dev/null

4. Настраиваем ssh:

В /etc/ssh/sshd_config кроме прочих опций надо чтоб было:
PubkeyAuthentication yes
Остальное - по вкусу.

На машине BETTA делаем:

1. Настраиваем /etc/ppp/options:

lock
noauth

2. Делаем su -

И: ssh 100.200.300.400 (для появления файла known_hosts)
ssh-keygen -t rsa -f /etc/ssh/vpn-identity
После этого берем /etc/ssh/vpn-identity.pub и копируем его на машину ALPHA
в каталог /home/vpn/.ssh в файл с именем authorized_keys.

3. Качаем программку pry-redir:

http://uncensored.citadel.org/pub/unix/pty-redir-0.1.tar.gz
Распаковываем, делаем make, складываем то, что получилось в /usr/sbin

4. Пишем например такое:

/etc/init.d/vpnd:
#!/bin/sh
#
# vpnd:       Starts the ppp over ssh tunnel
#
# Version:      @(#) /etc/init.d/vpnd 1.0
#
#########

# Source function library.
. /etc/init.d/functions

prog=VPND

USERNAME=vpn-user
IDENTITY=/etc/ssh/identify.vpn
CRYPTO=blowfish

LOCK_DIR=/var/run

VPN_EXTERNAL=100.200.300.400
VPN_INTERNAL=192.168.1.19

#PPP_OPTIONS=" mtu 1200 mru 1200"

PTY_REDIR=/usr/sbin/pty-redir
PPPD=/usr/sbin/pppd
ROUTE=/sbin/route
SSH=/usr/bin/ssh

start() {
  echo -n $"Starting $prog: "

  $PTY_REDIR $SSH -t -e none -o 'Batchmode yes' -c $CRYPTO -i $IDENTITY -l $USERNAME $VPN_EXTERNAL > /tmp/vpn-device
  sleep 10

  $PPPD `cat /tmp/vpn-device` 192.168.2.19:$VPN_INTERNAL # $PPP_OPTIONS
  ret=$?

  sleep 10
  $ROUTE add -net 192.168.1.0 gw $VPN_INTERNAL netmask 255.255.255.0


  [ $ret -eq 0 ] && echo_success; touch $LOCK_DIR/vpnd.pid
  echo
  return $ret
}

stop() {

   echo -n $"Shutting down $prog: "

   killall pppd

   ret=$?
   [ $ret -eq 0 ] && rm -f $LOCK_DIR/vpnd.pid
   echo
   return $ret
}

restart() {
   echo $"Restarting $prog:"
   stop
   start
}

rhstatus() {
   echo $"Status of $prog:"
   status pppd
}
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart)
    restart
    ;;
  status)
    rhstatus
    ;;
  *)
    echo $"*** Usage: $prog {start|stop|status|restart}"
    exit 1
esac

exit $?

Вроде все. Для rh делаем service vpnd start.
Должно работать.


<< Предыдущая ИНДЕКС Поиск в статьях src,palm Установить закладку Перейти на закладку Следующая >>

Обсуждение
 
  • Соединения 2 локальных сетей с помощью ppp over ssh (ssh ppp network vpn), neshura, 21:24:10, 07/14/2003 [ответить]
    А если канал скажем на 10 мин упадет
    Коннект порвется
    Для поднятия канала нужно restart делать?

  • Соединения 2 локальных сетей с помощью ppp over ssh (ssh ppp network vpn), Голованов Сергей, 06:20:54, 07/15/2003 [ответить]
    Да, нужно делать restart. Я как раз сейчас делаю скриптик, к-й будет следить за каналом и делать рестарт или поднимать обычный ppp-линк - резервный канал. Как сделаю - могу рассказать :0)

  • Соединения 2 локальных сетей с помощью ppp over ssh (ssh ppp network vpn), Илья Евсеев, 06:25:39, 07/15/2003 [ответить]
    Довольно странно замечание в тексте про отсутствие источников информации, так как на сайте Linux Domumentation Project есть два документа: "VPN PPP-SSH Mini-HOWTO" и "VPN HOWTO". Оба найдены простым поиском "ppp ssh".

  • Соединения 2 локальных сетей с помощью ppp over ssh (ssh ppp network vpn), nece, 14:26:02, 07/16/2003 [ответить]
    > # Да, нужно делать restart. Я как раз сейчас делаю >скриптик, к-й будет следить за каналом и делать >рестарт или поднимать обычный ppp-линк - резервный >канал. Как сделаю - могу рассказать :0)

    Ага интересно, хорошо бы в подробностях :-)

  • Соединения 2 локальных сетей с помощью ppp over ssh (ssh ppp network vpn), Mongos, 16:58:15, 07/16/2003 [ответить]
    vtun.sf.net  самый простой способ.  :)

  • Соединения 2 локальных сетей с помощью ppp over ssh (ssh ppp network vpn), Голованов Сергей, 16:20:29, 07/17/2003 [ответить]
    Mongos - риспект и спасибо. ёмаё. :0)) Сколько гемора можно было избежать :0)