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

Авторы
История сайта
Статистика
Архив
  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 и способов аутентификации.
подписка

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

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

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.1105 секунд
Из них PHP: 29%; SQL: 71%; Число SQL-запросов: 53 шт.
Исходный размер: 93121; Сжатая: 17290