от Zerg(17-06-2005)

рейтинг (18)   [ добре ]  [ зле ]

Printer Friendly Вариант за отпечатване

Виртуален тунел на базата на 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 >>