OpenVPN - построение туннеля

Материал из megapuper
Перейти к: навигация, поиск

OpenVPN — свободная реализация технологии Виртуальной Частной Сети (VPN) с открытым исходным кодом для создания зашифрованных каналов типа точка-точка или сервер-клиенты между компьютерами. Она позволяет устанавливать соединения между компьютерами, находящимися за NAT-firewall, без необходимости изменения их настроек.


Задача заключается в создании простого туннеля между двумя серверами, подключенными к Интернет. Приступаем. Имеется два сервера: первый с FreeBSD_8.3 - ROUTER_1 и второй с FreeBSD_9.0 - ROUTER_2. Первым делом проверяем наличие псевдоустройства tun в системах, если его нет либо пересобираем ядро добавив в конфиг строчку:

device tun # Packet tunnel

либо подгружаем модулем:

# kldload /boot/kernel/if_tun.ko

проверяем:

#kldstat -v | grep tun
368 if_tun


Чтобы модуль подгружался со стартом системы, прописываем его в rc.conf:

# echo 'if_tun_load="YES"' >> /boot/loader.conf


IP-первого сервера 109.172.52.115
IP-второго сервера 95.30.222.10


Настраиваем ROUTER_1
Ставим OpenVPN:

# cd /usr/ports/security/openvpn/
# make install


После установки создаём папку для конфигов и ключ шифрования:

# mkdir /usr/local/etc/openvpn
# openvpn --genkey --secret /usr/local/etc/openvpn/tun0.key


Посмотрим ключ:

# ee /usr/local/etc/openvpn/tun0.key
#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
a360ff2cdf87aed7f66f22f8ff55aad7
673ff62d9bcc1c05e429c1f00593ea02
0e107b070f21a52e0918b5d5066d753e
6db27c86dc58b5e61a6f0a89016d21d9
a943e0d5b46dad753c66711ee2cf318f
rg4jmecfr43c487b36c34cfb43g4jnfg84
a4529eaa942dc6afc8c1469960f4ba53
c6a39e06d091e620155ca0e86a12a19b
3cfr234v45rvn4tvu4tmbc48bv487483
2bf14502fb4e42cead5fc3f0af9f7096
c3e3bbf7e2d8318b9b85292cb46732fb
dd0f72fadba94c1d1d87315db2b00e6f
820e5c3bfbf8afddafa7b4dc2aeb2448
43gjkh4r5y432cf437fv62379d87389f79
a52bd8c74c5e6675a1ebb2b4e1558128
20dc505909007b91594452ed67fd9e74
-----END OpenVPN Static key V1-----

Этим ключом будем шифровать наш туннель.


Затем создаём конфиг /usr/local/etc/openvpn/openvpn.conf вида:

dev tun0 #создаем устройство tun
remote 95.30.222.10 #ip-адрес удаленного пира
10.10.10.1 #ip-адрес точки VPN на ROUTER_1
10.10.10.2 #ip-адрес точки VPN на ROUTER_2
ifconfig 10.10.10.1 10.10.10.2
secret /usr/local/etc/openvpn/tun0.key #ключ шифрования для туннеля


Для автозапуска OpenVPN добаляем в /etc/rc.conf:

openvpn_enable="YES"
openvpn_configfile="/usr/local/etc/openvpn/openvpn.conf"
openvpn_dir="/usr/local/etc/openvpn"


Запускаем:

# /usr/local/etc/rc.d/openvpn start


Проверяем:

# ifconfig
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1500
        options=80000<LINKSTATE>
        inet 10.10.10.1 --> 10.10.10.2 netmask 0xffffffff 
        Opened by PID 6638

Всё в порядке.


Настраиваем ROUTER_2
По аналогии ставим из портов openvpn. Создаём папку для конфигов и файлик для ключа:

# mkdir /usr/local/etc/openvpn
# touch /usr/local/etc/openvpn/tun0.key
# chmod 600 /usr/local/etc/openvpn/tun0.key

Заливаем туда содержимое tun0.key с ROUTER_1


Создаём конфиг /usr/local/etc/openvpn/openvpn.conf вида:

dev tun0 #создаем устройство tun
remote 109.172.52.115 #ip-адрес удаленного пира
10.10.10.1 #ip-адрес точки VPN на ROUTER_1
10.10.10.2 #ip-адрес точки VPN на ROUTER_2
ifconfig 10.10.10.2 10.10.10.1
secret /usr/local/etc/openvpn/tun0.key #ключ шифрования для туннеля


Для автозапуска OpenVPN добаляем в /etc/rc.conf:

openvpn_enable="YES"
openvpn_configfile="/usr/local/etc/openvpn/openvpn.conf"
openvpn_dir="/usr/local/etc/openvpn"


Запускаем:

# /usr/local/etc/rc.d/openvpn start


Проверяем:

# ifconfig
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1500
    options=80000<LINKSTATE>
    inet6 fe80::2e0:52ff:fe98:917b%tun0 prefixlen 64 scopeid 0xa 
    inet 10.10.10.2 --> 10.10.10.1 netmask 0xffffffff 
    nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
    Opened by PID 2524


Всё в порядке. Пингуем с обоих роутеров доступность «другой» стороны туннеля.
ROUTER_1:

# ping 10.10.10.2
PING 10.10.10.2 (10.10.10.2): 56 data bytes
64 bytes from 10.10.10.2: icmp_seq=0 ttl=64 time=20.093 ms
64 bytes from 10.10.10.2: icmp_seq=1 ttl=64 time=20.097 ms
64 bytes from 10.10.10.2: icmp_seq=2 ttl=64 time=20.136 ms
^C
--- 10.10.10.2 ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 20.093/20.109/20.136/0.019 ms


ROUTER_2:

# ping 10.10.10.1
PING 10.10.10.1 (10.10.10.1): 56 data bytes
64 bytes from 10.10.10.1: icmp_seq=0 ttl=64 time=20.554 ms
64 bytes from 10.10.10.1: icmp_seq=1 ttl=64 time=20.156 ms
64 bytes from 10.10.10.1: icmp_seq=2 ttl=64 time=20.137 ms
^C
--- 10.10.10.1 ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 20.137/20.282/20.554/0.192 ms

Все зе бест. На этом построение туннеля завершено. Дальше дело за маршрутизацией…