LINUX-BG   Адрес : http://www.linux-bg.org
Виртуален тунел на базата на Linux -2
От: Zerg
Публикувана на: 17-06-2005
Адрес на статията: http://www.linux-bg.org/cgi-bin/y/index.pl?page=article&id=advices&key=372999101
Виртуален тунел на базата на Linux

Това е втора статия по въпроса, по препоръката на коментарите от първата статия за друг по-добър продукт. Отново е превод и оригинала можете да откриете тук.

Много ще се радвам, ако някой я допълни и обогати.


Защо OpenVPN?
 ---------------
 
 Когато потърсих думата vpn в Google оговориха 17 000 000 препратки. 
 Това ме удиви приятно. След малко свиване на търсенето се натъкнах на сайта openvpn.sourceforge.net. 
 Въвеждащата статия обещаваше простота на инсталирането и конфигурирането, а най-вече,възможност за 
 създаване на тунел за повечето разпространени операционни системи, 
 включително Linux,SUN Solaris,*BSD, Mac OS X, w2k, w2k3.
 Това ми бе и необходимо... 
 
   Външен интерфейс                 Външен интерфейс    
 
    100.100.100.1                    101.101.101.1
   +--------------+                 +-------------+
   |   SuSE 8.2   |     Internet    | FreeBSD 5.3 |
   |              |-----------|             |
   | NAT,FireWall |                 |  NAT, ipfw  |
   |              |                 |             |
   +-----+--------+                 +-------+-----+
         ^      ^                     ^     ^
         |      |         VPN         |     |
         |      +---------------------+     |
         |              10.1.1.0            |
   +-----+---+                           +--+------+
   |Локальная|                           |Локальная|
   |   сеть  |                           |   сеть  |
   +---------+                           +---------+
     10.0.0.0                            192.168.1.0
 
 
       Рис.1. Схема на моята виртуална частна мрежа.
 
 Тъй като планирах да работя с VPN-а "завинаги", прекомпилирах ядрото на SuSE с поддръжка на tun/tap драйверите.
  В съвременните дистрибуции на FreeBSD поддръжката на tun/tap е вградена в ядрото.
 
 След това инсталирах пакета. За SuSE:
 
         #cp openvpn-1.6.0.tar.gz /usr/src
         #tar -xzvf openvpn-1.6.0.tar.gz. 
         #./configure
         #./make
         #./make install
 
 
 По време на инсталацията SuSE поиска да се инсталира предварително и библиотеката lzo.
 
 Под FreeBSD всичко премина гладко: 
 
         #cd /usr/ports/security/openvpn
         #./make 
         #./make install
 
 
 OpenVPN има два режима на защита. Първия се базира на SSL/TLS с използване на сертификати и ключове.
  Втория,- на използването на статични ключове.
 
 За създаването на сертификатите се наложи да редактирам във файла /etc/ssl/openssl.cnf няколко реда:
 
         #
         ...
         dir             = /usr/local/etc/openvpn
         certificate     = $dir/my-ca.crt
         private_key     = $dir/private/my-ca.key
 
 
 И за да не се занимавам с тази процедура (създаване на ключове и сертификати)всяка година (навярно ще забравя).
 
         default_days    = 3650 #(10 лет) ще стигне до пенсия...
         ...
 
 
 След това генерирам ключове и сертификати:
 
         openvpn reg -nodes -new -x509 -keyout my-ca.key -out my-ca.crt -day 3650
 
 
 Дадената команда създава двойка сертификат/ключ действащи 10 години.
 След това създавам двойка сертификат/частен ключ за всеки офис:
 
         openvpn reg -nodes -new -x509 -keyout office1.key -out office1.csr
         openvpn reg -nodes -new -x509 -keyout office2.key -out office2.csr
         openvpn ca -out office1.crt -in office1.csr
         openvpn ca -out office2.crt -in office2.csr
 
 
 Аз не съм много силен в защитата, но след като искат да се създадат параметри Диффи Хельман за office2,създаваме:
 
         openvpn dhparam -out dh1024.pem 1024
 
 
 Не забравям да пренеса ключовете и сертификатите на машината office2.
 Това е всичко с ключовете. Преминавам към конфигуриране на vpn.
 Всъщност конфигурирането се свежда до създаване на конфигурационни файлове за  офис1 и офис2.
  При мен офис1 е сървър и съдържа:
 
         #office1
         dev tun
         port 5000
         ifconfig 10.1.1.1 10.1.1.2
         #Тук вдигаме маршутизацията
         up /etc/openvpn/office1.up
         #Тук премахваме маршутизацията
         down /etc/openvpn/office1.down
         tls-server
         dh dh1024.pem
         ca my-ca.crt
         cert office1.crt
         key office1.key
         verb3
         #end office1
 
 
 А това е при клиента:
 
         #office2
         dev tun
         port 5000
         remote 100.100.100.1
         ifconfig 10.1.1.2 10.1.1.1
         #Тук вдигаме маршутизацията
         up /etc/openvpn/office2.up
         #Тук премахваме маршутизацията
         down /etc/openvpn/office2.down
         tls-client
         dh dh1024.pem
         ca my-ca.crt
         cert office2.crt
         key office2.key
         verb3
         #end office2
 
 
 За да могат да се виждат мрежите една друга файла office1.up съдържа:
 
         #up routing
         route add -net 192.168.10.0/24 10.1.1.2
 
 
 Сценария down трябва да премахне маршрута 
 office1.down
 
         #down
         route del -net 192.168.10.0/24
 
 
 office2.up съдържа:
 
         #up routing FreeBSD 
         route add -net 10.0.0.0/24 10.1.1.1 netmask 255.255.255.0
 
 
 office2.down:
 
         #down FreeBSD
         route delete -net 10.0.0.0/24
 
 
 Стартираме:
 
         openvpn --config office1 на сървъра;
         openvpn --config office2 на клиента.
 
 
 И проверяваме.
 
 SuSE:
 
         $ ifconfig
         tun0      Link encap:Point-to-Point Protocol
                   inet addr:10.1.1.1  P-t-P:10.1.1.2  Mask:255.255.255.255
                   UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1259  Metric:1
                   RX packets:79017 errors:0 dropped:0 overruns:0 frame:0
                   TX packets:85421 errors:0 dropped:0 overruns:0 carrier:0
                   collisions:0 txqueuelen:10
                   RX bytes:11237151 (10.7 Mb)  TX bytes:34079868 (32.5 Mb)
 
         $ ping 10.1.1.2
         PING 10.1.1.2 (10.1.1.2) 56(84) bytes of data.
         64 bytes from 10.1.1.2: icmp_seq=1 ttl=64 time=271 ms
         64 bytes from 10.1.1.2: icmp_seq=2 ttl=64 time=419 ms
         64 bytes from 10.1.1.2: icmp_seq=3 ttl=64 time=277 ms
         64 bytes from 10.1.1.2: icmp_seq=4 ttl=64 time=184 ms
         64 bytes from 10.1.1.2: icmp_seq=5 ttl=64 time=137 ms
 
         --- 10.1.1.2 ping statistics ---
         6 packets transmitted, 5 received, 16% packet loss, time 5039ms
         rtt min/avg/max/mdev = 137.763/258.168/419.546/96.461 ms
 
 
 FreeBSD:
 
         $ ifconfig
         tun0: flags=8051 mtu 1259
                 inet6 fe80::202:44ff:fe92:7ac6%tun0 prefixlen 64 scopeid 0x5
                 inet 10.1.1.2 --> 10.1.1.1 netmask 0xffffffff
                 Opened by PID 429
         $ ping 10.1.1.1
         PING 10.1.1.1 (10.1.1.1): 56 data bytes
         64 bytes from 10.1.1.1: icmp_seq=0 ttl=64 time=159.315 ms
         64 bytes from 10.1.1.1: icmp_seq=1 ttl=64 time=426.403 ms
         64 bytes from 10.1.1.1: icmp_seq=2 ttl=64 time=352.940 ms
         64 bytes from 10.1.1.1: icmp_seq=3 ttl=64 time=394.593 ms
         64 bytes from 10.1.1.1: icmp_seq=4 ttl=64 time=249.855 ms
         64 bytes from 10.1.1.1: icmp_seq=5 ttl=64 time=203.441 ms
         ^C
         --- 10.1.1.1 ping statistics ---
         6 packets transmitted, 6 packets received, 0% packet loss
         round-trip min/avg/max/stddev = 159.315/297.758/426.403/99.439 ms
         $
 
 
 Разработчиците на OpenVPN любезно са предоставили настройка на firewall-а за  Linux,която се включва
  в сценария за автостартиране на OpenVPN.
 
         #!/bin/sh
         dir=/etc/openvpn
         $dir/firewall.sh
         openvpn --cd $dir --daemon --config office1
 
 
 За FreeBSD,както винаги е доста по-просто:
 
 /usr/local/etc/rc.d/openvpn.sh
 
         #!/bin/sh
         dir=/etc/openvpn
         case $1 in
          start) openvpn --cd $dir --daemon --config office1;;
          stop)  killall -TERM openvpn;;
          *)     echo "Use: {start|stop}"
         esac
 
 
 rc.firewall
 
         #
         vpn="tun0"
         #vpn
         ${fwcmd} add allow ip from any to any via ${vpn}
         #nat
         ${fwcmd} add divert natd all from any to any via ${oif}
         #
 
 
 Това е.
 Огромно благодаря на разработчиците на OpenVPN!

<< Създаване на резервни копия с TAR | Малко висш пилотаж - изграждане на статистика с Cacti и RRDt >>

Авторите на сайта, както и техните сътрудници запазват авторските права върху собствените си материали публикувани тук, но те са copyleft т.е. могат свободно да бъдат копирани и разпространявани с изискването изрично да се упоменава името на автора, както и да се публикува на видно място, че те са взети от оригиналния им URL-адрес на този сървър (http://www.linux-bg.org). Авторските права на преводните материали принадлежат на техните автори. Ако с публикуването тук на някакъв материал неволно са нарушени нечии права - след констатирането на този факт материалът ще бъде свален.

All trademarks, logos and copyrights mentioned on this site are the property of their respective owners.
Linux is copyright by Linus Torvalds.
© Линукс за българи ЕООД 2007
© Slavei Karadjov 1999 - 2006

All rights reserved.

Изпълнението отне: 0 wallclock secs ( 0.16 usr + 0.04 sys = 0.20 CPU)