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.
|