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

  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:ded24eac6fb9840624b0d05cee8df1cb' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtecenter\"><img alt=\"OpenVPN\" width=\"140\" height=\"32\" src=\"http://muff.kiev.ua/files/openvpn_logo.png\" /></p>\n<p class=\"rtejustify\">Для начала немного общей информации.</p>\n<p class=\"rtejustify\">OpenVPN &ndash; надежное и гибкое решение для VPN, позволяющее большинству платформам семейства Unix/Linux, Windows 2000/XP, и Mac OSX безопасно устанавливать зашифрованные каналы связи между собой.<br />\nOpenVPN &mdash; свободная реализация технологии Виртуальной Частной Сети (VPN) с открытым исходным кодом для создания зашифрованных каналов типа точка-точка или сервер-клиенты между компьютерами. Она позволяет устанавливать соединения между компьютерами находящимися за NAT-firewall без необходимости изменения его настроек. OpenVPN была создана Джеймсом Йонан (James Yonan) и распространяется под лицензией GNU GPL.</p>\n<p class=\"rtejustify\">Создание&nbsp;VPN-тунеля с помощью&nbsp;OpenVPN&nbsp;подразумевает под собой создание псевдоустройства&nbsp;tun. Проверьте, пожалуйста, присутствует ли у вас в конфигурационном файле ядра&nbsp;такая&nbsp;строка:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>device&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tun&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Packet tunnel.</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">&nbsp;Если данное устройсво исключено из ядра, необходимо пересобрать ядро с данной опцией, или же подгрузить модуль для данного устройства.</p>\n<p class=\"rtejustify\">Тем, кто будет пересобирать ядро - <a href=\"http://muff.kiev.ua/node/16\">сюда</a>&nbsp;(рекомендую именно этот вариант, если планируете долгосрочное использование тунеля). Мы же подгрузим модуль для устройства tun, поскольку на данный момент только тестируем тунель.</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<p><strong># kldstat</strong><br />\n Id Refs Address Size Name<br />\n 1 3 0xffffffff80100000 525b50 kernel<br />\n 2 1 0xffffffff80822000 56e snake_saver.ko<br />\n <strong># kldload /boot/kernel/if_tun.ko</strong><br />\n <strong># kldstat<br />\n </strong>Id Refs Address Size Name<br />\n 1 4 0xffffffff80100000 525b50 kernel<br />\n 2 1 0xffffffff80822000 56e snake_saver.ko<br />\n <span style=\"color: #ff0000\">3 1 0xffffffff80823000 26de if_tun.ko</span></p>\n</td>\n</tr>\n</tbody>\n</table>\n<p>Модуль подгрузился. Не помешало бы, чтобы этот модуль подгружался и на этапе загрузки системы:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td># <strong>echo \'if_tun_load=&quot;YES&quot;\' &gt;&gt; /boot/loader.conf</strong></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Итак, продолжим.</p>\n<p class=\"rtejustify\">На данный момент между&nbsp;<strong>Router 1</strong> и <strong>Router 2 </strong>есть 1&nbsp;хоп при трассировке (пока тестируем достаточно и этого,&nbsp;все равно&nbsp;количество промежуточных хопов ни на что не влияет).</p>\n<p>&nbsp;</p>\n<p class=\"rtecenter\"><strong>Схема построения</strong>:</p>\n<p class=\"rtecenter\"><img alt=\"\" width=\"530\" height=\"71\" src=\"http://muff.kiev.ua/files/openvpn.PNG\" /></p>\n<p class=\"rtecenter\">&nbsp;</p>\n<p class=\"rtejustify\">IP интерфейсов,&nbsp;что смотрят в&nbsp;Internet на маршрутизаторах:</p>\n<p class=\"rtejustify\"><strong>Router 1:</strong> 195.3.159.250</p>\n<p class=\"rtejustify\"><strong>Router2:</strong>&nbsp;193.227.207.94&nbsp;</p>\n<p class=\"rtejustify\">Трассировка с <strong>Router 1 </strong>к<strong>&nbsp;</strong><strong>Router2</strong>:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<p># <strong>traceroute -n 193.227.207.94<br />\n </strong>traceroute to 193.227.207.94 (193.227.207.94), 64 hops max, 52 byte packets<br />\n &nbsp;1&nbsp; 195.3.159.249&nbsp; 0.182 ms&nbsp; 0.210 ms&nbsp; 0.112 ms<br />\n &nbsp;2&nbsp; 193.227.207.94&nbsp; 1.109 ms&nbsp; 1.078 ms&nbsp; 1.046 ms</p>\n</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Настраиваем <strong>Router 1</strong>.&nbsp;Поищем пакет openvpn в портах:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<p><strong># cd /usr/ports/</strong><br />\n <strong># make search name=\'openvpn\'<br />\n </strong><span style=\"color: #ff0000\">Port: openvpn-2.0.6_9</span><br />\n <span style=\"color: #ff0000\">Path: /usr/ports/security/openvpn<br />\n Info: Secure IP/Ethernet tunnel daemon</span><br />\n Maint: <span class=\"spamspan\"><span class=\"u\">matthias [dot] andree</span> [at] <span class=\"d\">gmx [dot] de</span></span><br />\n B-deps: lzo2-2.03_2<br />\n R-deps: lzo2-2.03_2<br />\n WWW: <a href=\"http://openvpn.net/\" title=\"http://openvpn.net/\">http://openvpn.net/</a></p>\n<p>Port: openvpn-admin-1.9.4_2<br />\n Path: /usr/ports/security/openvpn-admin<br />\n Info: GUI frontend to openvpn<br />\n Maint: <span class=\"spamspan\"><span class=\"u\">ports</span> [at] <span class=\"d\">FreeBSD [dot] org</span></span><br />\n B-deps: atk-1.26.0 bitstream-vera-1.10_4 cairo-1.8.8,1 compositeproto-0.4 damageproto-1.1.0_2 encodings-1.0.2,1 expat-2.0.1 fixesproto-4.0 font-bh-ttf-1.0.0 font-misc-ethiopic-1.0.0 font-misc-meltho-1.0.0_1 font-util-1.0.1 fontconfig-2.6.0,1 freetype2-2.3.9_1 gamin-0.1.10_3 gettext-0.17_1 gio-fam-backend-2.20.4 glib-2.20.4 gmake-3.81_3 gtk-2.16.5_1 gtk-sharp-2.12.9_1 hicolor-icon-theme-0.10_2 inputproto-1.5.0 intltool-0.40.6 jasper-1.900.1_8 jpeg-7 kbproto-1.0.3 libX11-1.2.1_1,1 libXau-1.0.4 libXcomposite-0.4.0,1 libXcursor-1.1.9_1 libXdamage-1.1.1 libXdmcp-1.0.2_1 libXext-1.0.5,1 libXfixes-4.0.3_1 libXft-2.1.13 libXi-1.2.1,1 libXinerama-1.0.3,1 libXrandr-1.3.0 libXrender-0.9.4_1 libfontenc-1.0.4 libglade2-2.6.4_1 libiconv-1.13.1 libpthread-stubs-0.1 libxcb-1.4 libxml2-2.7.3 mkfontdir-1.0.4 mkfontscale-1.0.6 mono-2.4.2.3_1 p5-XML-LibXML-1.69,1 p5-XML-LibXML-Common-0.13 p5-XML-NamespaceSupport-1.10 p5-XML-Parser-2.36_1 p5-XML-SAX-0.96 pango-1.24.5 pcre-7.9 perl-threaded-5.8.9_3 pixman-0.15.4 pkg-config-0.23_1 png-1.2.38 python26-2.6.2_2 randrproto-1.3.0 renderproto-0.9.3 shared-mime-info-0.60_1 tiff-3.8.2_4 xcb-proto-1.5 xcb-util-0.3.5 xextproto-7.0.5 xineramaproto-1.1.2 xmlcatmgr-2.2 xorg-fonts-truetype-7.4 xproto-7.0.15<br />\n R-deps: atk-1.26.0 bitstream-vera-1.10_4 cairo-1.8.8,1 compositeproto-0.4 damageproto-1.1.0_2 encodings-1.0.2,1 expat-2.0.1 fixesproto-4.0 font-bh-ttf-1.0.0 font-misc-ethiopic-1.0.0 font-misc-meltho-1.0.0_1 font-util-1.0.1 fontconfig-2.6.0,1 freetype2-2.3.9_1 gamin-0.1.10_3 gettext-0.17_1 gio-fam-backend-2.20.4 glib-2.20.4 gtk-2.16.5_1 gtk-sharp-2.12.9_1 hicolor-icon-theme-0.10_2 inputproto-1.5.0 jasper-1.900.1_8 jpeg-7 kbproto-1.0.3 libX11-1.2.1_1,1 libXau-1.0.4 libXcomposite-0.4.0,1 libXcursor-1.1.9_1 libXdamage-1.1.1 libXdmcp-1.0.2_1 libXext-1.0.5,1 libXfixes-4.0.3_1 libXft-2.1.13 libXi-1.2.1,1 libXinerama-1.0.3,1 libXrandr-1.3.0 libXrender-0.9.4_1 libfontenc-1.0.4 libglade2-2.6.4_1 libiconv-1.13.1 libpthread-stubs-0.1 libxcb-1.4 libxml2-2.7.3 lzo2-2.03_2 mkfontdir-1.0.4 mkfontscale-1.0.6 mono-2.4.2.3_1 openvpn-2.0.6_9 p5-XML-LibXML-1.69,1 p5-XML-LibXML-Common-0.13 p5-XML-NamespaceSupport-1.10 p5-XML-SAX-0.96 pango-1.24.5 pcre-7.9 perl-threaded-5.8.9_3 pixman-0.15.4 pkg-config-0.23_1 png-1.2.38 python26-2.6.2_2 randrproto-1.3.0 renderproto-0.9.3 shared-mime-info-0.60_1 tiff-3.8.2_4 xcb-proto-1.5 xcb-util-0.3.5 xextproto-7.0.5 xineramaproto-1.1.2 xmlcatmgr-2.2 xorg-fonts-truetype-7.4 xproto-7.0.15<br />\n WWW: <a href=\"http://sourceforge.net/projects/openvpn-admin\" title=\"http://sourceforge.net/projects/openvpn-admin\">http://sourceforge.net/projects/openvpn-admin</a></p>\n<p>Port: openvpn-auth-ldap-2.0.3_1<br />\n Path: /usr/ports/security/openvpn-auth-ldap<br />\n Info: LDAP authentication plugin for OpenVPN<br />\n Maint: <span class=\"spamspan\"><span class=\"u\">snb</span> [at] <span class=\"d\">FreeBSD [dot] org</span></span><br />\n B-deps: lzo2-2.03_2 openldap-client-2.4.17 openvpn-2.0.6_9 re2c-0.13.5<br />\n R-deps: openldap-client-2.4.17<br />\n WWW: <a href=\"http://dpw.threerings.net/projects/openvpn-auth-ldap/\" title=\"http://dpw.threerings.net/projects/openvpn-auth-ldap/\">http://dpw.threerings.net/projects/openvpn-auth-ldap/</a></p>\n<p>Port: openvpn-devel-2.1.r19<br />\n Path: /usr/ports/security/openvpn-devel<br />\n Info: Secure IP/Ethernet tunnel daemon<br />\n Maint: <span class=\"spamspan\"><span class=\"u\">matthias [dot] andree</span> [at] <span class=\"d\">gmx [dot] de</span></span><br />\n B-deps: lzo2-2.03_2<br />\n R-deps: lzo2-2.03_2<br />\n WWW: <a href=\"http://openvpn.net/\">http://openvpn.net/</a></p>\n</td>\n</tr>\n</tbody>\n</table>\n<p>&nbsp;Найдено 4 порта. Нам нужен</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>Port: openvpn-2.0.6_9<br />\n Path: /usr/ports/security/openvpn<br />\n Info: Secure IP/Ethernet tunnel daemon<br />\n Maint: <span class=\"spamspan\"><span class=\"u\">matthias [dot] andree</span> [at] <span class=\"d\">gmx [dot] de</span></span><br />\n B-deps: lzo2-2.03_2<br />\n R-deps: lzo2-2.03_2<br />\n WWW: <a href=\"http://openvpn.net/\">http://openvpn.net/</a></td>\n</tr>\n</tbody>\n</table>\n<p>&nbsp;Приступаем к установке:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<p># <strong>cd /usr/ports/security/openvpn<br />\n </strong># <strong>make install clean</strong></p>\n</td>\n</tr>\n</tbody>\n</table>\n<p>Опции установки оставляем по умолчанию:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<p class=\"rtecenter\"><strong>Options for openvpn 2.0.6_9</strong></p>\n<pre>\n[ ] PW_SAVE Interactive passwords may be read from a file</pre></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">&nbsp;После установки не забываем обновить пути. Создаем каталог, где будут лежать конфигурационные файлы.</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<p># <strong>rehash</strong><br />\n # <strong>mkdir /usr/local/etc/openvpn<br />\n </strong># <strong>cd /usr/local/etc/openvpn</strong></p>\n</td>\n</tr>\n</tbody>\n</table>\n<p>Создаем файл с ключем шифрования тунеля.</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td># <strong>openvpn --genkey --secret /usr/local/etc/openvpn/tun0.key</strong></td>\n</tr>\n</tbody>\n</table>\n<p>&nbsp;Посмотрим результат команды:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<pre><strong># cat /usr/local/etc/openvpn/tun0.key</strong>\n#\n# 2048 bit OpenVPN static key\n#\n-----BEGIN OpenVPN Static key V1-----\nf85bf8204f9e47446e497d166f2f1aa2\n1980cd79f2fe7ce2d5054003a87dae08\n72b331532fe4da258e2e1fbf1fedbf84\n9b9185d573ee908955975a6f8eef6f4e\nf43195b7eafcf73b1a45392991be61ca\n756926c59899b689f127b998eb9369bd\n52eab3791708d0215dd6a59f226d8c91\naa523b288c715284ddcaa4f4df2f7a93\n75794c875fd28c2f14d351d92a1c6219\n5926866b44b72941eaec67e20495d549\n92f38c01fa22521f681ab50d71e3379e\n64fd253f10b929a6f27dc884e158b3b3\n7b2eb1e7ce0d4047618b59cae6b5ea78\n5fbf9c9fafdb70168c36b8f21b3e898e\na28dae707fe1995a1f6f5d153ea361fc\n31794c1fc8ef89000790e28d36444767\n-----END OpenVPN Static key V1-----</pre></td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Вот этим ключем и будем шифровать наш канал :)</p>\n<p class=\"rtejustify\">Создадим конфигурационный файл /usr/local/etc/openvpn/openvpn.conf . Листинг конфигурационного файла:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<div># Создаем устройство типа tun<br />\n dev tun0</div>\n<div>&nbsp;</div>\n<div># IP-адресс удаленного пира<br />\n remote 193.227.207.94</div>\n<div>&nbsp;</div>\n<div># 91.196.102.190 - это IP-адресс локальной конечной точки VPN<br />\n # 91.196.102.189 - это IP-адресс удаленной конечной точки VPN<br />\n ifconfig 91.196.102.190 91.196.102.189</div>\n<div>&nbsp;</div>\n<div># Указываем ключ шифрования для тунеля<br />\n secret /usr/local/etc/openvpn/tun0.key<br />\n &nbsp;</div>\n</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Добавляем&nbsp;опции загрузки&nbsp;в /etc/rc.conf:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<p># <strong>echo \'#OpenVPN\' &gt;&gt; /etc/rc.conf<br />\n </strong># <strong>echo \'openvpn_enable=&quot;YES&quot;\' &gt;&gt; /etc/rc.conf<br />\n </strong># <strong>echo \'openvpn_configfile=&quot;/usr/local/etc/openvpn/openvpn.conf&quot;\' &gt;&gt;&nbsp; /etc/rc.conf<br />\n </strong># <strong>echo \'openvpn_dir=&quot;/usr/local/etc/openvpn&quot;\'&nbsp; &gt;&gt; /etc/rc.conf</strong></p>\n</td>\n</tr>\n</tbody>\n</table>\n<p>&nbsp;Запускаем тунель:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td># <strong>sh /usr/local/etc/rc.d/openvpn start</strong></td>\n</tr>\n</tbody>\n</table>\n<p>Проверяем, создался ли туннель:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td><strong># ifconfig tun0</strong><br />\n tun0: flags=8051&lt;UP,POINTOPOINT,RUNNING,MULTICAST&gt; metric 0 mtu 1500<br />\n inet 91.196.102.190 --&gt; 91.196.102.189 netmask 0xffffffff<br />\n Opened by PID 673<br />\n &nbsp;</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Все гуд. Приступаем к конфигурированию <strong>Router2</strong>.</p>\n<p class=\"rtejustify\">По аналогии установим из портов openvpn. Потом создадим каталог для конфигурационных файлов и создадим такой же ключ шифрования, как и на&nbsp;&nbsp;<strong>Router1 </strong>(должен&nbsp;совпадать на обеих маршрутизаторах):</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<p># <strong>mkdir /usr/local/etc/openvpn<br />\n </strong># <strong>touch /usr/local/etc/openvpn/tun0.key<br />\n </strong>#&nbsp;<strong>chmod 600 /usr/local/etc/openvpn/tun0.key</strong></p>\n</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Заливаем туда содержимое /usr/local/etc/openvpn/tun0.key с <strong>Router1</strong>.</p>\n<p class=\"rtejustify\">Создаем конфигурационный файл. Листинг /usr/local/etc/openvpn/openvpn.conf:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<p><strong># cat /usr/local/etc/openvpn/openvpn.conf</strong></p>\n<p># Создаем устройство типа tun<br />\n dev tun</p>\n<p># IP-адресс удаленного пира<br />\n remote 195.3.159.250</p>\n<p># 91.196.102.189 - это IP-адресс локальной конечной точки VPN<br />\n # 91.196.102.190 - это IP-адресс удаленной конечной точки VPN<br />\n ifconfig 91.196.102.189 91.196.102.190</p>\n<p># Указываем ключ шифрования для тунеля<br />\n secret /usr/local/etc/openvpn/tun0.key<br />\n &nbsp;</p>\n</td>\n</tr>\n</tbody>\n</table>\n<p>Добавляем&nbsp;опции загрузки&nbsp;в /etc/rc.conf:</p>\n<p><table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td>\n<p># <strong>echo \'#OpenVPN\' &gt;&gt; /etc/rc.conf<br />\n </strong># <strong>echo \'openvpn_enable=&quot;YES&quot;\' &gt;&gt; /etc/rc.conf<br />\n </strong># <strong>echo \'openvpn_configfile=&quot;/usr/local/etc/openvpn/openvpn.conf&quot;\' &gt;&gt;&nbsp; /etc/rc.conf<br />\n </strong># <strong>echo \'openvpn_dir=&quot;/usr/local/etc/openvpn&quot;\'&nbsp; &gt;&gt; /etc/rc.conf</strong></p>\n</td>\n</tr>\n</tbody>\n</table>\n</p>\n<p class=\"rtejustify\">&nbsp;Запускаем тунель:</p>\n<p><table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td># <strong>sh /usr/local/etc/rc.d/openvpn start</strong></td>\n</tr>\n</tbody>\n</table>\n</p>\n<p class=\"rtejustify\">Проверяем, создался ли туннель:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td><strong># ifconfig tun0</strong><br />\n tun0: flags=8051&lt;UP,POINTOPOINT,RUNNING,MULTICAST&gt; metric 0 mtu 1500<br />\n inet 91.196.102.189 --&gt; 91.196.102.190 netmask 0xffffffff<br />\n Opened by PID 37668</td>\n</tr>\n</tbody>\n</table>\n<p class=\"rtejustify\">Все ок... Проверяем с <strong>Router2 </strong>доступность &quot;другой&quot; стороны тунеля:</p>\n<table border=\"1\" cellspacing=\"1\" cellpadding=\"1\" width=\"100%\">\n<tbody>\n<tr>\n<td><strong># ping 91.196.102.190</strong><br />\n PING 91.196.102.190 (91.196.102.190): 56 data bytes<br />\n 64 bytes from 91.196.102.190: icmp_seq=0 ttl=64 time=1.512 ms<br />\n 64 bytes from 91.196.102.190: icmp_seq=1 ttl=64 time=1.390 ms<br />\n 64 bytes from 91.196.102.190: icmp_seq=2 ttl=64 time=1.226 ms<br />\n ^C<br />\n --- 91.196.102.190 ping statistics ---<br />\n 3 packets transmitted, 3 packets received, 0.0% packet loss<br />\n round-trip min/avg/max/stddev = 1.226/1.376/1.512/0.117 ms<br />\n &nbsp;</td>\n</tr>\n</tbody>\n</table>\n<p>Все ok. На этом построение тунеля завершено.</p>\n<p>Дальше дело за маршрутизацией... Уже вам решать что в этот тунель заворачивать.</p>\n', created = 1768003579, expire = 1768089979, headers = '', serialized = 0 WHERE cid = '2:ded24eac6fb9840624b0d05cee8df1cb' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:07243fc0252056071eaa62af8c18d662' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtecenter\"><a class=\"thickbox\" href=\"/files/imagepicker/1/wake_up_ua.png\"><img alt=\"Вставай, Україно!\" class=\"imgp_img\" src=\"/files/imagepicker/1/thumbs/wake_up_ua.png\" style=\"height:200px; width:150px\" /></a></p>\n', created = 1768003579, expire = 1768089979, headers = '', serialized = 0 WHERE cid = '2:07243fc0252056071eaa62af8c18d662' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '3:cc913d232116f0426090404133377d88' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '2:d9a86123bfcbc57878743027b584400b' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: UPDATE cache_filter SET data = '<p class=\"rtecenter\"><a href=\"http://muff.kiev.ua/rss.xml\"><img alt=\"RSS\" width=\"160\" height=\"60\" src=\"http://muff.kiev.ua/files/muf-rss.png\" /></a></p>\n', created = 1768003579, expire = 1768089979, headers = '', serialized = 0 WHERE cid = '2:d9a86123bfcbc57878743027b584400b' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 112.
  • user warning: Table './muffsql1/cache_filter' is marked as crashed and should be repaired query: SELECT data, created, headers, expire, serialized FROM cache_filter WHERE cid = '3:39649256b636e3d5ded656bc52bd8c01' in /usr/local/www/muff.kiev.ua/includes/cache.inc on line 27.
Версия для печатиОтправить другуPDF version

OpenVPN

Для начала немного общей информации.

OpenVPN – надежное и гибкое решение для VPN, позволяющее большинству платформам семейства Unix/Linux, Windows 2000/XP, и Mac OSX безопасно устанавливать зашифрованные каналы связи между собой.
OpenVPN — свободная реализация технологии Виртуальной Частной Сети (VPN) с открытым исходным кодом для создания зашифрованных каналов типа точка-точка или сервер-клиенты между компьютерами. Она позволяет устанавливать соединения между компьютерами находящимися за NAT-firewall без необходимости изменения его настроек. OpenVPN была создана Джеймсом Йонан (James Yonan) и распространяется под лицензией GNU GPL.

Создание VPN-тунеля с помощью OpenVPN подразумевает под собой создание псевдоустройства tun. Проверьте, пожалуйста, присутствует ли у вас в конфигурационном файле ядра такая строка:

device          tun             # Packet tunnel.

 Если данное устройсво исключено из ядра, необходимо пересобрать ядро с данной опцией, или же подгрузить модуль для данного устройства.

Тем, кто будет пересобирать ядро - сюда (рекомендую именно этот вариант, если планируете долгосрочное использование тунеля). Мы же подгрузим модуль для устройства tun, поскольку на данный момент только тестируем тунель.

# kldstat
Id Refs Address Size Name
1 3 0xffffffff80100000 525b50 kernel
2 1 0xffffffff80822000 56e snake_saver.ko
# kldload /boot/kernel/if_tun.ko
# kldstat
Id Refs Address Size Name
1 4 0xffffffff80100000 525b50 kernel
2 1 0xffffffff80822000 56e snake_saver.ko
3 1 0xffffffff80823000 26de if_tun.ko

Модуль подгрузился. Не помешало бы, чтобы этот модуль подгружался и на этапе загрузки системы:

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

Итак, продолжим.

На данный момент между Router 1 и Router 2 есть 1 хоп при трассировке (пока тестируем достаточно и этого, все равно количество промежуточных хопов ни на что не влияет).

 

Схема построения:

 

IP интерфейсов, что смотрят в Internet на маршрутизаторах:

Router 1: 195.3.159.250

Router2: 193.227.207.94 

Трассировка с Router 1 к Router2:

# traceroute -n 193.227.207.94
traceroute to 193.227.207.94 (193.227.207.94), 64 hops max, 52 byte packets
 1  195.3.159.249  0.182 ms  0.210 ms  0.112 ms
 2  193.227.207.94  1.109 ms  1.078 ms  1.046 ms

Настраиваем Router 1. Поищем пакет openvpn в портах:

# cd /usr/ports/
# make search name='openvpn'
Port: openvpn-2.0.6_9
Path: /usr/ports/security/openvpn
Info: Secure IP/Ethernet tunnel daemon

Maint: matthias [dot] andree [at] gmx [dot] de
B-deps: lzo2-2.03_2
R-deps: lzo2-2.03_2
WWW: http://openvpn.net/

Port: openvpn-admin-1.9.4_2
Path: /usr/ports/security/openvpn-admin
Info: GUI frontend to openvpn
Maint: ports [at] FreeBSD [dot] org
B-deps: atk-1.26.0 bitstream-vera-1.10_4 cairo-1.8.8,1 compositeproto-0.4 damageproto-1.1.0_2 encodings-1.0.2,1 expat-2.0.1 fixesproto-4.0 font-bh-ttf-1.0.0 font-misc-ethiopic-1.0.0 font-misc-meltho-1.0.0_1 font-util-1.0.1 fontconfig-2.6.0,1 freetype2-2.3.9_1 gamin-0.1.10_3 gettext-0.17_1 gio-fam-backend-2.20.4 glib-2.20.4 gmake-3.81_3 gtk-2.16.5_1 gtk-sharp-2.12.9_1 hicolor-icon-theme-0.10_2 inputproto-1.5.0 intltool-0.40.6 jasper-1.900.1_8 jpeg-7 kbproto-1.0.3 libX11-1.2.1_1,1 libXau-1.0.4 libXcomposite-0.4.0,1 libXcursor-1.1.9_1 libXdamage-1.1.1 libXdmcp-1.0.2_1 libXext-1.0.5,1 libXfixes-4.0.3_1 libXft-2.1.13 libXi-1.2.1,1 libXinerama-1.0.3,1 libXrandr-1.3.0 libXrender-0.9.4_1 libfontenc-1.0.4 libglade2-2.6.4_1 libiconv-1.13.1 libpthread-stubs-0.1 libxcb-1.4 libxml2-2.7.3 mkfontdir-1.0.4 mkfontscale-1.0.6 mono-2.4.2.3_1 p5-XML-LibXML-1.69,1 p5-XML-LibXML-Common-0.13 p5-XML-NamespaceSupport-1.10 p5-XML-Parser-2.36_1 p5-XML-SAX-0.96 pango-1.24.5 pcre-7.9 perl-threaded-5.8.9_3 pixman-0.15.4 pkg-config-0.23_1 png-1.2.38 python26-2.6.2_2 randrproto-1.3.0 renderproto-0.9.3 shared-mime-info-0.60_1 tiff-3.8.2_4 xcb-proto-1.5 xcb-util-0.3.5 xextproto-7.0.5 xineramaproto-1.1.2 xmlcatmgr-2.2 xorg-fonts-truetype-7.4 xproto-7.0.15
R-deps: atk-1.26.0 bitstream-vera-1.10_4 cairo-1.8.8,1 compositeproto-0.4 damageproto-1.1.0_2 encodings-1.0.2,1 expat-2.0.1 fixesproto-4.0 font-bh-ttf-1.0.0 font-misc-ethiopic-1.0.0 font-misc-meltho-1.0.0_1 font-util-1.0.1 fontconfig-2.6.0,1 freetype2-2.3.9_1 gamin-0.1.10_3 gettext-0.17_1 gio-fam-backend-2.20.4 glib-2.20.4 gtk-2.16.5_1 gtk-sharp-2.12.9_1 hicolor-icon-theme-0.10_2 inputproto-1.5.0 jasper-1.900.1_8 jpeg-7 kbproto-1.0.3 libX11-1.2.1_1,1 libXau-1.0.4 libXcomposite-0.4.0,1 libXcursor-1.1.9_1 libXdamage-1.1.1 libXdmcp-1.0.2_1 libXext-1.0.5,1 libXfixes-4.0.3_1 libXft-2.1.13 libXi-1.2.1,1 libXinerama-1.0.3,1 libXrandr-1.3.0 libXrender-0.9.4_1 libfontenc-1.0.4 libglade2-2.6.4_1 libiconv-1.13.1 libpthread-stubs-0.1 libxcb-1.4 libxml2-2.7.3 lzo2-2.03_2 mkfontdir-1.0.4 mkfontscale-1.0.6 mono-2.4.2.3_1 openvpn-2.0.6_9 p5-XML-LibXML-1.69,1 p5-XML-LibXML-Common-0.13 p5-XML-NamespaceSupport-1.10 p5-XML-SAX-0.96 pango-1.24.5 pcre-7.9 perl-threaded-5.8.9_3 pixman-0.15.4 pkg-config-0.23_1 png-1.2.38 python26-2.6.2_2 randrproto-1.3.0 renderproto-0.9.3 shared-mime-info-0.60_1 tiff-3.8.2_4 xcb-proto-1.5 xcb-util-0.3.5 xextproto-7.0.5 xineramaproto-1.1.2 xmlcatmgr-2.2 xorg-fonts-truetype-7.4 xproto-7.0.15
WWW: http://sourceforge.net/projects/openvpn-admin

Port: openvpn-auth-ldap-2.0.3_1
Path: /usr/ports/security/openvpn-auth-ldap
Info: LDAP authentication plugin for OpenVPN
Maint: snb [at] FreeBSD [dot] org
B-deps: lzo2-2.03_2 openldap-client-2.4.17 openvpn-2.0.6_9 re2c-0.13.5
R-deps: openldap-client-2.4.17
WWW: http://dpw.threerings.net/projects/openvpn-auth-ldap/

Port: openvpn-devel-2.1.r19
Path: /usr/ports/security/openvpn-devel
Info: Secure IP/Ethernet tunnel daemon
Maint: matthias [dot] andree [at] gmx [dot] de
B-deps: lzo2-2.03_2
R-deps: lzo2-2.03_2
WWW: http://openvpn.net/

 Найдено 4 порта. Нам нужен

Port: openvpn-2.0.6_9
Path: /usr/ports/security/openvpn
Info: Secure IP/Ethernet tunnel daemon
Maint: matthias [dot] andree [at] gmx [dot] de
B-deps: lzo2-2.03_2
R-deps: lzo2-2.03_2
WWW: http://openvpn.net/

 Приступаем к установке:

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

Опции установки оставляем по умолчанию:

Options for openvpn 2.0.6_9

[ ] PW_SAVE Interactive passwords may be read from a file

 После установки не забываем обновить пути. Создаем каталог, где будут лежать конфигурационные файлы.

# rehash
# mkdir /usr/local/etc/openvpn
# cd /usr/local/etc/openvpn

Создаем файл с ключем шифрования тунеля.

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

 Посмотрим результат команды:

# cat /usr/local/etc/openvpn/tun0.key
#
# 2048 bit OpenVPN static key
#
-----BEGIN OpenVPN Static key V1-----
f85bf8204f9e47446e497d166f2f1aa2
1980cd79f2fe7ce2d5054003a87dae08
72b331532fe4da258e2e1fbf1fedbf84
9b9185d573ee908955975a6f8eef6f4e
f43195b7eafcf73b1a45392991be61ca
756926c59899b689f127b998eb9369bd
52eab3791708d0215dd6a59f226d8c91
aa523b288c715284ddcaa4f4df2f7a93
75794c875fd28c2f14d351d92a1c6219
5926866b44b72941eaec67e20495d549
92f38c01fa22521f681ab50d71e3379e
64fd253f10b929a6f27dc884e158b3b3
7b2eb1e7ce0d4047618b59cae6b5ea78
5fbf9c9fafdb70168c36b8f21b3e898e
a28dae707fe1995a1f6f5d153ea361fc
31794c1fc8ef89000790e28d36444767
-----END OpenVPN Static key V1-----

Вот этим ключем и будем шифровать наш канал :)

Создадим конфигурационный файл /usr/local/etc/openvpn/openvpn.conf . Листинг конфигурационного файла:

# Создаем устройство типа tun
dev tun0
 
# IP-адресс удаленного пира
remote 193.227.207.94
 
# 91.196.102.190 - это IP-адресс локальной конечной точки VPN
# 91.196.102.189 - это IP-адресс удаленной конечной точки VPN
ifconfig 91.196.102.190 91.196.102.189
 
# Указываем ключ шифрования для тунеля
secret /usr/local/etc/openvpn/tun0.key
 

Добавляем опции загрузки в /etc/rc.conf:

# echo '#OpenVPN' >> /etc/rc.conf
# echo 'openvpn_enable="YES"' >> /etc/rc.conf
# echo 'openvpn_configfile="/usr/local/etc/openvpn/openvpn.conf"' >>  /etc/rc.conf
# echo 'openvpn_dir="/usr/local/etc/openvpn"'  >> /etc/rc.conf

 Запускаем тунель:

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

Проверяем, создался ли туннель:

# ifconfig tun0
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1500
inet 91.196.102.190 --> 91.196.102.189 netmask 0xffffffff
Opened by PID 673
 

Все гуд. Приступаем к конфигурированию Router2.

По аналогии установим из портов openvpn. Потом создадим каталог для конфигурационных файлов и создадим такой же ключ шифрования, как и на  Router1 (должен совпадать на обеих маршрутизаторах):

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

Заливаем туда содержимое /usr/local/etc/openvpn/tun0.key с Router1.

Создаем конфигурационный файл. Листинг /usr/local/etc/openvpn/openvpn.conf:

# cat /usr/local/etc/openvpn/openvpn.conf

# Создаем устройство типа tun
dev tun

# IP-адресс удаленного пира
remote 195.3.159.250

# 91.196.102.189 - это IP-адресс локальной конечной точки VPN
# 91.196.102.190 - это IP-адресс удаленной конечной точки VPN
ifconfig 91.196.102.189 91.196.102.190

# Указываем ключ шифрования для тунеля
secret /usr/local/etc/openvpn/tun0.key
 

Добавляем опции загрузки в /etc/rc.conf:

# echo '#OpenVPN' >> /etc/rc.conf
# echo 'openvpn_enable="YES"' >> /etc/rc.conf
# echo 'openvpn_configfile="/usr/local/etc/openvpn/openvpn.conf"' >>  /etc/rc.conf
# echo 'openvpn_dir="/usr/local/etc/openvpn"'  >> /etc/rc.conf

 Запускаем тунель:

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

Проверяем, создался ли туннель:

# ifconfig tun0
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1500
inet 91.196.102.189 --> 91.196.102.190 netmask 0xffffffff
Opened by PID 37668

Все ок... Проверяем с Router2 доступность "другой" стороны тунеля:

# ping 91.196.102.190
PING 91.196.102.190 (91.196.102.190): 56 data bytes
64 bytes from 91.196.102.190: icmp_seq=0 ttl=64 time=1.512 ms
64 bytes from 91.196.102.190: icmp_seq=1 ttl=64 time=1.390 ms
64 bytes from 91.196.102.190: icmp_seq=2 ttl=64 time=1.226 ms
^C
--- 91.196.102.190 ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 1.226/1.376/1.512/0.117 ms
 

Все ok. На этом построение тунеля завершено.

Дальше дело за маршрутизацией... Уже вам решать что в этот тунель заворачивать.

Ваша оценка: Нет Средняя: 3.7 (6 голосов)

Вставай, Україно!

Литература

Совесть выполнила недопустимую операцию и будет закрыта