OpenVPN - построение туннеля
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
Все зе бест. На этом построение туннеля завершено. Дальше дело за маршрутизацией…