Начальные условия
1 - есть два офиса, расположенных в разных городах с локальными сетями: 172.16.5.0/24 в каждом офисе. IP Сервера в городе А - 106.2.12.212, а IP сервера в городе В - 56.224.244.80.
2 - в качестве маршрутизаторов или роутеров, используется компьютеры с двумя сетевыми картами
3 - в качестве OS на компьютерах - маршрутизаторах используется любой Linux
4 - в качестве ПО на компьютерах - маршрутизаторах нам понадобиться iptables и vpnd.
5 - Сервер и клиент - имеют реальные IP.
Задача
Необходимо связать два или более офисов в единую сеть.
Для этого необходимо проложить между этими офисами сетевой ткннель.
Сетевые туннели необходимы для связи компьютеров или сетей через интернет.
На мой взгляд, реализовать этот туннель проще всего с помощью vpnd(Virtual Private Network Daemon). По сравнению с другими решениями по созданию сетевых туннелей, vpnd прост в установке, не требует поднимать заново канал после обрыва связи, и шифрует трафик некоммерческим алгоритмом - "Blowfish.

Уточняю: Для работы данной схемы, необходимо на каждой рабочей станции офиса "A" создать дополнительную сеть, или как еще говорят - алиас. Именно на этом алиасе и будет работать VPN.
Учитывая, что связь должна быть двусторонней такая-же сеть понадобиться и в офисе "B".
Но на каждой рабочей станции поднимать 2 сети не совсем удобно, потому, мы это сделаем только на роутерах, а для того, чтобы рабочии станции видели VPN сеть, применим iptables.
Получение и установка
Первым делом надо убедиться что ваше ядро поддерживает протокол - SLIP. Если нет, его необходимо пересобрать. Если вы используете дистрибутив Linux c предкомпилированным ядром (Mandrake, Suse, alt-linux и. е. д.) то скорее всего у вас есть модуль SLIP для вашего ядра, и вам остается только его загрузить. (man modprobe или man insmod).
Если ваш дистрибутив Linix не содержит пакета с vpnd, его можно скачать с сайта этого проекта.
После распаковываем, и собираем.
cd vpnd
./configure
make
Далее распихиваем появившиеся файлы по местам:
vpnd.conf и vpnd.chat копируем в /etc.
Исполняемый файлик vpnd куданибудь, где его будет видно системе, например в /usr/local/sbin/.
Настройка и запуск
Для работы демона vpnd необходимо создать ключ. Для этого запустите:
В каталоге /etc должен появиться файл vpnd.key это и есть ключик. Данный ключик должен присутствовать у вас и вашего клиента (сервера). Потому не забудьте его переписать на сервер:
VPND запускается командой:
Если вы планируете много соединений, (допустим, у вашей фирмы много филиалов), то для удобства запуска нескольких сессий vpnd, создадим rc-скрипт:
# chkconfig: 345 13 86
# description: Manage the VPN deamon for this host
echo VPND
# Source function library.
#. /etc/rc.d/init.d/functions
# This grabs only the hostname. Larger networks may require FQNs.
HOST=`hostname -s`
case "$1" in
start)
echo -n "Starting vpnd: "
if [ ! -f /var/lock/subsys/vpnd ]; then
CONF=`ls /etc/vpnd/*.conf`
for conf in $CONF; do
echo "/usr/local/sbin/vpnd -f $conf"
/usr/local/sbin/vpnd -f $conf
if [ $? != 0 ]; then
failure; echo
exit 1
fi
done
touch /var/lock/subsys/vpnd
echo "success"
fi
;;
stop)
echo -n "Stopping vpnd: "
PIDS=`ls /var/run/vpnd_*.pid 2>/dev/null`
# PIDS='/var/run/vpnd.pid'
echo
if [ $? != 0 ]; then
failure; echo
echo "Failed to find PID of running vpnd process!"
exit 1
fi
for apid in $PIDS; do
kill `cat $apid`
# ^^ Adding -9 here will prevent vpnd from removing its pid file
if [ $? != 0 ]; then
failure; echo
exit 1
fi
done
rm -f /var/lock/subsys/vpnd
echo "success"
;;
restart)
$0 stop
$0 start
;;
status)
status vpnd
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
;;
esac
exit 0
И положим его в /etc/init.d
Теперь в /etc создадим каталог vpnd, куда после будем класть конфиги наших vpn-клиентов или vpn-серверов. Их можно класть туда сколько угодно, скрипт при запуске поднимет все экземпляры конфигов. Важно, проследить чтобы в каждом конфиге номер порта не повторялся!
Настало время настроить конфигурационные файлы. Разница между клиентом и сервером в данной ситуации - условна. Она заключаеться в том, какой серверов (имеется в виду компьютер) будет осуществлять соидинение, или восстанавливать его при обрыве.
Предположим, что параметры нашего клиента вот такие:
Локальная сеть: 172.16.5.0
Внешний ip 106.2.12.212
Сеть по которой работают пользователи туннеля на стороне клиента 192.168.4.0/24
ip клиентского vpnd сервера 192.168.4.1
Настройка vpnd.conf клиента:
client 106.2.12.212 2000
server 56.224.244.80 2000
local 192.168.4.1
remote 192.168.2.1
keyfile /etc/vpnd.key
pidfile /var/run/vpnd_moscow.pid
randomdev /dev/urandom
keepalive 10
mtu 1600
nocslip
nocompress
autoroute
peerroute
route1 192.168.2.0 255.255.255.0 192.168.4.1
route2 192.168.4.0 255.255.255.0 172.16.5.1
Предположим, что параметры нашего сервера вот такие:
Локальная сеть: 172.16.5.0 (она может отличаться от локальной сети на стороне клиента).
Внешний ip 56.224.244.80
Сеть по которой работают пользователи туннеля на стороне сервера 192.168.2.0/24
ip клиентского vpnd сервера 192.168.2.1
Настройка vpnd.conf сервера:
client 106.2.12.212 2000
server 56.224.244.80 2000
local 192.168.2.1
remote 192.168.4.1
keyfile /etc/vpnd.key
randomdev /dev/urandom
pidfile /var/run/vpnd_tula.pid
mtu 1600
nocslip
nocompress
peerroute
route1 192.168.4.0 255.255.255.0 192.168.2.1
route2 192.168.2.0 255.255.255.0 172.16.5.1
Если есть файрвол
Разрешить порт для работы vpnd, по умолчанию это 2000. Если у вас несколько клиентов, то все порты, какие у вас перечислены во всех конфигах.
Так же может понадобиться:
Во входной цепочки на сервере:
Во входной цепочки у клиента:
где sl1 - сетевой интерфейс для vpnd.
в выходной цепочки на сервере:
в выходной цепочки у клиента:
Для выхода всех пользователей на стороне клиента:
Для выхода всех пользователей на стороне сервера:
Обслуживание
Генерация ключа:
Запуск сервера






