|
Ключевые слова: ssh, ppp, network, vpn, (найти похожие документы)
From: Голованов Сергей <azgs@mail.ru> Date: Mon, 14 Jul 2004 13:01:37 +0000 (UTC) Subject: Соединения 2 локальных сетей с помощью ppp over ssh соединения 2 локальных сетей с помощью ppp over ssh за 5 минут ------------------- Когда понадобилось соединить 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. Должно работать.
|
|