Мы — долго запрягаем, быстро ездим, и сильно тормозим.

Авторы
История сайта
Статистика
Архив
  CVSup
  EXIM & courier-imap
  postfix & courier-imap
  SQUID
  SAMBA
  IPsec
  C-ICAP
  exim & dbmail
  vpnd
  Samba как PDC
  pureftpd
  diskless
  gmirror
  SAMBA + LDAP
  IPSEC
  SAMBA+ACL
  Lightsquid
  LiveCD (+restore)
  1С:Предприятие 8.2
Карта сайта
поисковые слова
Личные настройки
Реклама
Друзья сайта


www.lissyara.su —> главная —> Архив —> vpnd

vpnd - организация защищённого VPN-туннеля под FreeBSD

Автор: lissyara.


    Возникла необходимость поднять туннель между двумя машинами - 6.0 и 4.11 FreeBSD. Вначале хотел сделать на racoon, но произошёл косяк - при запуске racoon фряха(6.0) падала... Мальца поковырявшись понял - причину я не знаю, и определить не могу... Чтож - это решение не единственное, но т.к. людям надо было работать (происходило это на фоне сдохшей мамы старого сервера, и в процессе переноса всего и настройки нового), временно поднял нешифрованный туннель на gif-интерфейсах и полез в порты - смотреть что ещё есть на тему vpn. Openvpn - штука популярная, но документация и мануалы какие-то невнятные - даже не стал ставить. Зато нашлось другое решение - vpnd, по нему на русском не было вообще, зато подкупил пример конфига, в пять строк, на сайте разработчика. Решил поставить, для начала на машине с FreeBSD6.0:
/usr/home/lissyara/>cd /usr/ports/
/usr/ports/>make search name='vpnd'
Port:   vpnd-1.1.2
Path:   /usr/ports/security/vpnd
Info:   VPN daemon offering transparent blowfish encryption between networks
Maint:  anders@FreeBSD.org
B-deps:
R-deps:
WWW:    http://vpnd.dotsrc.org/

/usr/ports/>cd /usr/ports/security/vpnd
/usr/ports/security/vpnd/>make && make install && make clean

После чего генерим ключ:

/usr/local/etc/>vpnd -m vpnd.key
This may take a while. Please continue working in another session to allow
gathering of random data.
New key file /usr/local/etc/vpnd.key created.
/usr/local/etc/>
/usr/local/etc/>ls -alh | grep vpnd.key
-r--------   1 root  wheel    72B 15 мар 20:34 vpnd.key
/usr/local/etc/>

И делаем такой конфиг /usr/local/etc/vpnd.conf
# Конфиг vpnd


# Где лежит pid
pidfile         /var/run/vpnd.pid
# `Рандом` девайс
randomdev       /dev/urandom

# Режим работы (клиент, или сервер)
mode server
# IP и порт клиента
client 222.222.222.222 538
# IP и порт сервера
server 111.111.111.111 599
# Локальный IP (из локальной частной сети)
local 192.168.10.254
# Удалённый IP (из удалённой частной сети)
remote 192.168.20.254
# Файло с ключом
keyfile /usr/local/etc/vpnd.key

# следующие строки понадобились ввиду большого времени отклика,
# Причём без последних двух (обе про компрессию) тормозило вообще жутко
# - едва ли не байты в секунду.
keepalive       2
noanswer        3
retry           5
nocslip
nocompress

После чего добавляем пару строк в /etc/rc.conf и запускаем демона:
/usr/local/etc/rc.d/>echo '' >> /etc/rc.conf
/usr/local/etc/rc.d/>echo 'vpnd_enable="YES"' >> /etc/rc.conf
/usr/local/etc/rc.d/>echo '' >> /etc/rc.conf
/usr/local/etc/>rc.d/vpnd.sh start
Starting vpnd.
/usr/local/etc/>rc.d/vpnd.sh start
/usr/local/etc/rc.d/>sockstat | grep vpn
root     vpnd       45566 0  dgram  -> /var/run/logpriv
root     vpnd       45566 3  tcp4   111.111.111.111:599   *:*
/usr/local/etc/rc.d/>
/usr/local/etc/rc.d/>ifconfig
sl0: flags=9091<UP,POINTOPOINT,NOARP,LINK0,MULTICAST> mtu 1500
        inet 192.168.10.254 --> 192.168.20.254 netmask 0xffffffff

В итоге у нас появился новый интерфейс sl0, и слушаемый порт - tcp:599. Сразу разрешаем его в файрволле, строками типа (до natd!):
${FwCMD} add allow tcp from 222.222.222.222 to ${IpOut} 599 via ${LanOut}
${FwCMD} add allow ip from any to any via ${LanTunnel}
${FwCMD} add allow ip from 192.168.10.0/24 to 192.168.20.0/24 via ${LanIn}
${FwCMD} add allow ip from 192.168.20.0/24 to 192.168.10.0/24 via ${LanIn}

где ${IpOut} - внешний IP машины, ${LanOut} - внешняя сетевуха, ${LanTunnel} - имя туннельного интерфейса (sl0 - но я не уверен в необходимости этого правила, ибо без него работает, но по этому правилу ходят пакеты - подозреваю оно перекрывалось каким-то другим. Лучше добавить.)
Всё. Идём на другую машину, захватив с собой нагенерённый ключ - он должен быть одинаковым (я по ftp перенёс, хотя это несекурно :))). Для начала выставляем права на ключ:
/usr/local/etc/>ls -lah | grep vpnd.key
-rw-r--r--   1 root  wheel    72B 15 мар 21:55 vpnd.key
/usr/local/etc/>chmod 400 vpnd.key
/usr/local/etc/>ls -lah | grep vpnd.key
-r--------   1 root  wheel    72B 15 мар 21:55 vpnd.key
/usr/local/etc/>

Затем ставим vpnd из портов, как и на первой машине, и делаем такой конфиг:
# Конфиг vpnd


# Где лежит pid
pidfile         /var/run/vpnd.pid
# `Рандом` девайс
randomdev       /dev/urandom

# Режим работы (клиент, или сервер)
mode client
# IP и порт клиента
client 222.222.222.222 538
# IP и порт сервера
server 111.111.111.111 599
# Локальный IP (из локальной частной сети)
local 192.168.20.254
# Удалённый IP (из удалённой частной сети)
remote 192.168.10.254
# Файло с ключом
keyfile /usr/local/etc/vpnd.key

# следующие строки понадобились ввиду большого времени отклика,
# Причём без последних двух (обе про компрессию) тормозило вообще жутко
# - едва ли не байты в секунду.
keepalive       2
noanswer        3
retry           5
nocslip
nocompress

Конфиги отличаются совсем немного - тремя строками. После чего запускаем vpnd:

/usr/local/etc/>rc.d/vpnd.sh start
.: Can't open /etc/rc.subr: No such file or directory

Тут была засада - неверный путь в скрипте запуска. Поправил на тот, что в 4.11 (/usr/local/etc/rc.subr), и всё завелось:
/usr/local/etc/>rc.d/vpnd.sh start
Starting vpnd.
/usr/local/etc/>ifconfig
sl0: flags=9091<UP,POINTOPOINT,NOARP,LINK0,MULTICAST> mtu 1500
        inet 192.168.20.254 --> 192.168.10.254 netmask 0xffffffff

/usr/local/etc/>sockstat | grep vpn
root     vpnd     68626    3 tcp4   222.222.222.222:538  111.111.111.111:599
root     vpnd     68626    0 dgram  syslogd[124]:3
/usr/local/etc/>

Добавляем в файрволл такие правила:
${FwCMD} add allow tcp from 111.111.111.111 to ${IpOut} 538
${FwCMD} add allow ip from any to any via ${LanTunnel}
${FwCMD} add allow ip from 192.168.10.0/24 to 192.168.20.0/24 via ${LanIn}
${FwCMD} add allow ip from 192.168.20.0/24 to 192.168.10.0/24 via ${LanIn}

и пробуем пингануть удалённую машину:
/usr/home/lissyara/>ping 192.168.10.254
PING 192.168.10.254 (192.168.10.254): 56 data bytes
64 bytes from 192.168.10.254: icmp_seq=0 ttl=64 time=140.558 ms
64 bytes from 192.168.10.254: icmp_seq=1 ttl=64 time=141.514 ms
64 bytes from 192.168.10.254: icmp_seq=2 ttl=64 time=139.954 ms
64 bytes from 192.168.10.254: icmp_seq=3 ttl=64 time=139.423 ms
64 bytes from 192.168.10.254: icmp_seq=4 ttl=64 time=139.855 ms
64 bytes from 192.168.10.254: icmp_seq=5 ttl=64 time=141.216 ms
^C
--- 192.168.10.254 ping statistics ---
6 packets transmitted, 6 packets received, 0% packet loss
round-trip min/avg/max/stddev = 139.423/140.420/141.514/0.751 ms
/usr/home/lissyara/>

Тока не надо пугаться временем ответа - в этом виноват не vpn а поганый провайдер...
   Итак, все забегало, но пока лишь между этими машинами - надо добавить роутинг, чтобы можно было лазить между сетями - действия одинаковые для обоих машин, только будут разные в таблицах роутинга. Ввиду того, что скрипты в /usr/local/etc/rc.d запускаются в алфавитном порядке, у меня возникли проблемы - у меня уже был файл, заполнявший таблицу маршрутизации (кстати, её можно посмотреть командой netstat -r), и назывался он вполне логично - route.sh, и запускаться он должен был до vpn. Потому пришлось схитрить:
/usr/local/etc/rc.d/>ls -lah | grep vpn
-r-xr-xr-x   1 root  wheel  462B 15 мар 21:58 vpnd.sh
/usr/local/etc/rc.d/>mv vpnd.sh 000.vpnd.sh
/usr/local/etc/rc.d/>ls -lah | grep vpn
-r-xr-xr-x   1 root  wheel  462B 15 мар 21:58 000.vpnd.sh
/usr/local/etc/rc.d/>

Теперь вначале будет запускаться VPN а потом мой скипт, такого содержания:
/usr/local/etc/rc.d/route.sh:
#!/bin/sh
# на первой машине (FreeBSD6.0)
/sbin/route add 192.168.20.0/24 192.168.20.254

#!/bin/sh
# на второй машине (FreeBSD4.11)
/sbin/route add 192.168.10.0/24 192.168.10.254

После чего делаем его выполняемым, и запускаем.
/usr/local/etc/rc.d/>chmod +x route.sh
/usr/local/etc/rc.d/>

И становятся видны машины внутри сетей:
/usr/local/etc/rc.d/>ping 192.168.10.1
PING 192.168.10.1 (192.168.10.1): 56 data bytes
64 bytes from 192.168.10.1: icmp_seq=0 ttl=127 time=140.528 ms
64 bytes from 192.168.10.1: icmp_seq=1 ttl=127 time=140.671 ms
64 bytes from 192.168.10.1: icmp_seq=2 ttl=127 time=140.117 ms
64 bytes from 192.168.10.1: icmp_seq=3 ttl=127 time=140.556 ms
64 bytes from 192.168.10.1: icmp_seq=4 ttl=127 time=140.991 ms
^C
--- 192.168.10.1 ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max/stddev = 140.117/140.573/140.991/0.281 ms
/usr/local/etc/rc.d/>

P.S. Советую прочесть документацию на сайте разработчика и идущую в комплекте, возможности по конфигурированию гораздо шире - в частности, вторая машина (клиент) может иметь динамический адрес, можно определить время жизни ключа, и отключить компрессию (по дефолту она включена) и многое другое.

P.S.2 Решение не самое быстрое, на сетях между которыми большое время отклика. Поэтому мне придётся искать что-то другое... :(



Ссылка на обсуждение: http://forum.lissyara.su/viewtopic.php?f=8&t=5249.

размещено: 2006-03-15,
последнее обновление: 2011-01-02,
автор: lissyara

kelt, 2006-03-16 в 15:09:17

Советую глянуть ещё и MPD, уж больно гибко его можно настроить, и под разные , оч разные нужды.
/usr/ports/net/mpd/

lissyara, 2006-03-16 в 15:46:38

Чё-то там наверчено... Тут попроще решение надо. Хотя - тоже надо будет поразбираться - для больших сетей с большим количеством туннелей mpd больше подойдёт.
Видимо, буду racoon2 терзать. Тяжело быть первопроходцем, по нему вообще нигде ничего нет :)))

HOSTER, 2007-07-14 в 1:20:44

Круто !))) Мне понравилось !)))

Stan, 2007-08-09 в 11:49:30

БГГ... по опенвпн и невнятные доки??? БУГАГА...
Даже примеры конфигов есть...
А ко всему нуна голова... На которую не только шапку надевать можно...

Гость, 2010-05-19 в 13:18:54

Сегодня смотрел в репозиториях:
Port:   security/vpnd
Moved:
Date:   2010-05-02
Reason: Has expired: This software is no longer developed

ufs, 2011-01-02 в 17:11:47

Интересно, а какой VPN не поднимается в течении 15 минут?)



Хостинг HOST-FOOD

2014-07-27, lissyara
gmirror

Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9

Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту

Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis

Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
2011-08-14, zentarim
Wi-FI роутер + DHCP + DNS

Настройка Wi-Fi роутера на Freebsd 8 + DNS сервер + DHCP сервер: чтобы Wi-Fi клиенты были в одной подсети с проводными, проводные и беспроводные клиенты получали адреса автоматически по DHCP, кэширующ
2011-06-15, -ZG-
Охранная система на FreeBSD+LPT

В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт и видеорегистрацией.
2011-03-13, terminus
ng_nat

Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat
2011-02-20, Капитан
Nagios+Digitemp

Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp.
2011-02-17, Le1
Zyxel Configuration

Скрипт для массового изменения конфига свичей Zyxel. Берет из файла iplist список ip-шек, заходит последовательно на каждый и выполняет комманды из файла commands, записывая происходящее в лог файл.
2011-02-16, fox
hast carp zfs ucarp cluster

HAST (Highly Available Storage), CARP, UCARP, ZFS, Cluster настройка и одаптация плюс личные размышления…
2011-02-04, BlackCat
Восстановление ZFS

История о том, как был восстановлен развалившийся RAIDZ ZFS-пул (перешедший в FAULTED) с помощью скотча и подручных средств. Или о том, какие приключения ожидают тех, кто не делает резервных копий.
2011-02-03, Капитан
1-Wire

Статья описывает самостоятельное изготовление контроллера DS9097 для съёма показаний с датчиков температуры DS1820 с помощью программы Digitemp.
2011-01-28, Капитан
Температура в серверной

Статья описывает построение системы наблюдения за температурой в помещении серверной с использованием программы Digitemp и выводом графиков в MRTG
2011-01-21, m4rkell
Syslog server

Как то буквально на днях, у нас завалилось, что то в еве) или не в еве не суть. Суть в том, что когда захотели снять логи с хостов esx обнаружили, что хранят эти негодяи логии только за последнии сутк
2011-01-07, lissyara
Canon/gphotofs

Монтирование цифровых фотоаппаратов Canon (PTP) как файловой системы, автоматизация этого процесса через события devd и внешние скрипты.
2010-12-13, Al
IPSec

Описание принципов работы IPSEC и способов аутентификации.
подписка

    вверх      
Статистика сайта
Сейчас на сайте находится: 17 чел.
За последние 30 мин было: 79 человек
За сегодня было
235 показов,
77 уникальных IP
 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0411 секунд
Из них PHP: 36%; SQL: 64%; Число SQL-запросов: 53 шт.
Исходный размер: 92971; Сжатая: 17314