Задача: Соеденить филиалы с головным офисом посредством openvpn
Тех. характеристики: На всех филиалах в качестве шлюзовой машинки используется freebsd
Решение:
Устанавливаем openvpn
cd /usr/ports/security/openvpn
make install clean
mkdir -p /usr/local/etc/openvpn/{ccd,easy-rsa/keys}
cp /usr/local/share/doc/openvpn/easy-rsa/2.0/* /usr/local/etc/openvpn/easy-rsa/
ln -sf /usr/local/etc/openvpn/easy-rsa/keys /usr/local/etc/openvpn/
Если данный шлюза будет использоваться в качестве сервера то правим под себя
/usr/local/etc/openvpn/easy-rsa/vars
cd /usr/local/etc/openvpn/easy-rsa
sh
chmod +x *
. ./vars
Генерируем ключ сервера
./clean-all && ./build-ca && ./build-dh && ./build-key-server server
создадим файл /usr/local/etc/openvpn/server.conf
mode server
tls-server
daemon
ifconfig 192.168.10.1 255.255.255.0
port 9888
proto tcp-server
dev tap
ca /usr/local/etc/openvpn/keys/ca.crt
cert /usr/local/etc/openvpn/keys/server.crt
key /usr/local/etc/openvpn/keys/server.key
dh /usr/local/etc/openvpn/keys/dh1024.pem
client-config-dir /usr/local/etc/openvpn/ccd
push «route 192.168.10.0 255.255.255.0 192.168.10.1»
# Забегу вперед. Роуты на сети клиентов
route 172.161.250.0 255.255.255.0 192.168.10.101
route 172.161.252.0 255.255.255.0 192.168.10.102
route 192.16.0.0 255.255.255.0 192.168.10.111
#
keepalive 10 120
client-to-client
comp-lzo
persist-key
persist-tun
verb 3
log-append /var/log/openvpn.log
в rc.conf добавим
openvpn_enable=»YES»
openvpn_configfile=»/usr/local/etc/openvpn/server.conf»
Далее нужно подгрузить модуль для работы с tap-интерфейсами:
kldload if_tap
Чтобы модуль автоматически подгружался при загрузке нужно добавить в /boot/loader.conf строку:
if_tap_load=»YES»
Стартуем.
/usr/local/etc/rc.d/openvpn start
Правим PF
if_vpn = «tap0»
net_int = «xxx.xxx.0.0/24»
net_vpn = «192.168.10.0/24»
# Разрешаем исходящий трафик в сторону VPN-сети
pass out quick on $if_vpn from ($if_vpn) to $net_vpn
pass out quick on $if_vpn from $net_int to $net_vpn
# Разрешаем входящий трафик со стороны VPN-сети
pass in quick on $if_vpn from $net_vpn to any keep state
# Разрешаем обращение к нашему VPN-серверу снаружи
pass in quick on $ext_if inet proto tcp from any to ($ext_if) port 9888 flags S/SA keep state
Продолжение следует…