Поиск

Газета FOSS News

16 ноября 2011

О газете
Архив
Авторам
Рекламодателям

 

Кабинет читателя

Вход в систему
Введите имя пользователя и пароль для входа в систему:

4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4

openvpn: одна подсеть по разные стороны

28.02.10 /

Недвано подкинули интересную задачку: нужно соеденить по vpn'y 2 офиса, причём внутрення подсеть у них одна и та же. В качестве vpn'a выбрал openvpn. Шлюзы крутились на FreeBSD 7.2. Для соединения по vpn была выделена подсеть 10.15.0.0/31, то есть только 2 адреса: 10.15.0.1, 10.15.0.2

1) Подготовка.

Установку и создания ключей обписывать не буду, они уже описаны другой статье. Идея соединения такова: серваки подключаются по vpn'y, создаётся мост между сетевым подключением vpn и локальной сетью.

Для того, что бы можно было работать с бриджом (мостом), нужно либо

 - включить поддержку в ядре: пересобираем ядро с опцией

device if_bridge

 - либо подгрузить модулем: добавить в /boot/loader.conf

if_bridge_load="YES"

Ещё очень немаловажным моментом будет использование интерфейса tap вместо tun в openvpn. В tap используется инкапсуляция на уровне OSI 2, а в tun - 3. Нам же нужен именно 2-ой. Для возможности использования tap его нужно подгружать модулем: добавляем в /boot/loader.conf:

if_tap_load="YES"

 

2)Настройка openvpn'a.

Конфиг openvpn'a следующий (сервер):

dev tap
port 2284
ifconfig 10.15.0.1 255.255.255.252
ping 10
ping-restart 120
comp-lzo
verb 3
ca ca.crt
cert server.crt
key server.key
dh dh1024.pem
tls-server
user nobody
group nobody
log-append /var/log/vpn/server.log
status /var/log/vpn/status.log

конфиг клиента:

dev tap
port 2284
remote XX.XX.XX.XX
ifconfig 10.15.0.2 255.255.255.252
ping 10
ping-restart 120
user nobody
group nobody
comp-lzo
verb 3
ca ca.crt
cert client1.crt
key client1.key
dh dh1024.pem
tls-client
explicit-exit-notify 2
log-append /var/log/vpn/server.log
status /var/log/vpn/status.log

Вот так выглядит скрипт, запускающий vpn-соединение:

#!/bin/sh

while :; do
        /usr/local/sbin/openvpn --cd /usr/local/etc/openvpn --config /usr/local/etc/openvpn/openvpn.conf >> /var/log/vpn.log
done

Сам скрипт помещаю в папку /scripts, а для его запуска во время загрузки, создаём вот такой скрипт (называем его vpn) и помещаем его в /usr/local/etc/rc.d:

#!/bin/sh

# PROVIDE: vpn
# REQUIRE: DAEMON
# KEYWORD: shutdown

. /etc/rc.subr

: ${vpn_enable="YES"}

name="vpn"
rcvar=`set_rcvar`

load_rc_config $name

command_args="&"
command="/scripts/${name}"
run_rc_command "$1"

 

3)Заключение.

Для нормального запуска во время загрузки, в /etc/rc.conf должны присутствовать такие строки:

cloned_interfaces="bridge0 tap0"

ifconfig_bridge0="addm fxp0 addm tap0 up"

где, fxp0 - сетевуха, которая смотрит в локалку.

Если не хотите подгружать вручную модули и создавать бридж, запускать скрипты vpn'a, то просто перегрузите сервак. А если всё-таки не хотите перегружать сервак, то ниже приведена последовательность действий:

 - подгружаем модули tap, bridge:

#kldload if_bridge

#kldload if_tap

 - проверяем, подгрузились ли они:

# kldstat
Id Refs Address    Size     Name
 1    9 0xc0400000 8a0a58   kernel
 2    1 0xc0ca1000 585c     if_tap.ko
 3    1 0xc0ca7000 a30c     if_bridge.ko
 4    2 0xc0cb2000 62b0     bridgestp.ko

 - создаём bridge:

#ifconfig bridge0 create
#ifconfig bridge0 addm fxp0 addm tap0 up

 - проверяем создался ли:

#ifconfig bridge0
bridge0: flags=8843 metric 0 mtu 1500
        ether 2e:f5:7d:09:07:15
        id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15
        maxage 20 holdcnt 6 proto rstp maxaddr 100 timeout 1200
        root id 00:00:00:00:00:00 priority 32768 ifcost 0 port 0
        member: tap0 flags=143
                ifmaxaddr 0 port 8 priority 128 path cost 2000000
        member: fxp0 flags=143
                ifmaxaddr 0 port 5 priority 128 path cost 2000000

 - запускаем сам скрипт для поднятия vpn'a:

#/scripts/vpn &

 - ну и смотрим на само соединение:

# ifconfig tap0
tap0: flags=8943 metric 0 mtu 1500
        ether 00:bd:26:0f:00:00
        inet 10.15.0.1 netmask 0xfffffffc broadcast 10.15.0.3
        Opened by PID 1278

Собственно это всё :)


Автор: skeletor

По материалам:

Loading ...

Комментарии

Добавить комментарий

* - необходимое для заполнения поле

*




Изображение CAPTCHA для предотвращения спама
Если слово непонятно, нажмите здесь..
*
*
Karsen, 19-01-12 14:02:
Well put, sir, well put. I'll cretanily make note of that.
 
© 2004-2009 Журнал "Root UA" - свидетельство СМИ: КВ №14786-3757Р
Газета "FOSS News" - свидетельство СМИ: ОД №1355-236-Р
При использовании материалов портала ссылка на Root.UA обязательна, для интернет-изданий – гиперссылка, не закрытая для индексации поисковыми системами.

sitenews