Процедура

Процедура

Планирование

Перед тем, как вы начнете настраивать свою систему, вы должны уточнить детали, касающиеся сети. Я предполагаю, что у вас имеются две интрасети, каждая из которых защищена от внешней сети своим firewall. Соответственно, у вас имеются, как минимум, два сетевых интерфейса на каждом firewall. Возьмите листок бумаги и карандаш, и запишите их IP-адреса и маски. Вам потребуется также еще один IP-адрес на каждый firewall из сетевого пространства, создаваемого вами в VPN. Эти адреса не должны входить в пространство ни одной из существующих сетей. Я предлагаю вам использовать "частные" адреса. Вот их список:

Например, у вас может быть такая конфигурация: Две крепости firewall называются fellini и polanski. На каждом из них имеется интернет-интерфейс (-out), интранет-интерфейс (-in), и vpn-интерфейс (-vpn). Адреса и маски:

  • fellini-out: 193.6.34.12 255.255.255.0

  • fellini-in: 193.6.35.12 255.255.255.0

  • fellini-vpn: 192.168.0.1 point-to-point

  • polanski-out: 193.6.36.12 255.255.255.0

  • polanski-in: 193.6.37.12 255.255.255.0

  • polanski-vpn: 192.168.0.2 point-to-point

Итак, план у нас есть.

Что вам понадобится

Вам понадобится

Текущие версии:

  • ядро: 2.0.29 Используйте стабильное ядро, оно должно быть новее 2.0.20, в более ранних была ошибка ping'o'death. В настоящий момент существует ядро 2.0.30, но в нем есть пара ошибок. Если вы хотите, чтобы у вас работал новый более быстрый код работы с сетью, используйте препатч. 3-ий работает прекрасно.

  • базовая система: Я предпочитаю Debian. Но, каждому свое. Вы совсем не хотите использовать большие пакеты, и конечно никогда не думали о sendmail. Вам абсолютно не нужен telnet, ftp, и 'r'-команды (это необходимо только другим unix-ам).

  • ipfwadm: У меня версия 2.3.0

  • fwtk: У меня версия 1.3

  • ssh: 1.2.20 или новее. С более ранними версиями были проблемы с суб-протоколом.

  • pppd: Я использовал 2.2.0f для испытания, но я не уверен в его безопасности, поэтому я убрал у него флаг seteuid, и использовал для его запуска sudo.

  • sudo: 1.5.2 - самая новая из известных мне версий

  • pty-redir: Написан мной. Возьмите его по адресу ftp://ftp.vein.hu/ssa/contrib/mag/pty-redir-0.1.tar.gz. Номер версии - 0.1. Если с ним возникли проблемы - пишите мне.

Пишем скрипты

На вызывающей стороне я написал настоящий init-скрипт:


#! /bin/sh


PATH=/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/bin/X11/:
PPPAPP=/home/slave/ppp
ROUTEAPP=/home/slave/route
PPPD=/usr/sbin/pppd
NAME=VPN
REDIR=/usr/local/bin/pty-redir
SSH=/usr/bin/ssh
MYPPPIP=192.168.0.1
TARGETIP=192.168.0.2
TARGETNET=193.6.37.0
MYNET=193.6.35.0
SLAVEWALL=polanski-out
SLAVEACC=slave

test -f $PPPD || exit 0

set -e

case "$1" in
  start)
	echo setting up vpn
	echo Установка связи с VPN
        $REDIR $SSH -o 'Batchmode yes' -t -l $SLAVEACC $SLAVEWALL sudo $PPPAPP >/tmp/device
	TTYNAME=`cat /tmp/device`
echo tty is $TTYNAME
	sleep 10s
	if [ ! -z $TTYNAME ]
	then
	$PPPD $TTYNAME ${MYPPPIP}:${TARGETIP}
	else
		echo ОШИБКА!
		logger "Соединение VPN установить не удалось"
	fi
	sleep 5s
	route add -net $TARGETNET gw $TARGETIP
	$SSH -o 'Batchmode yes' -l $SLAVEACC $SLAVEWALL sudo $ROUTEAPP
    ;;
  stop)
	ps -ax | grep "ssh -t -l $SLAVEACC " | grep -v grep | awk '{print $1}' | xargs kill
    ;;
  *)
    # echo "Usage: /etc/init.d/$NAME {start|stop|reload}"
    echo "Usage: /etc/init.d/$NAME {start|stop}"
    echo "Использование: /etc/init.d/$NAME {start|stop}"
    exit 1
    ;;
esac

exit 0

На отвечающей потребовался только скрипт, добаляющий строку в таблицу маршрутизации (/usr/local/vpn/route):

#!/bin/bash  
/sbin/route add -net 193.6.35.0 gw 192.168.0.1  

а в файл .ppprc я записал следующее:

passive  



Наш баннер
Вы можете установить наш баннер на своем сайте или блоге, скопировав этот код:
RSS новости