Warning: Memcache::addserver() expects parameter 2 to be long, string given in /usr/home/rpc/domains/rpc.one.pl/public_html/libraries/joomla/cache/storage/memcache.php on line 84 Racoon czyli ipsec - VPN adres dynamiczny
 
 
Racoon czyli ipsec - VPN adres dynamiczny Drukuj Email
Wpisany przez rpc   
poniedziałek, 12 października 2009 06:45

Racoon czyli ipsec - VPN adres dynamiczny - openwrt 8.09.x , 10.03.x

 

Większość opisów tworzenia tunelu opiera się na OpenVPN. Dla odmiany postanowiłem opisać VPN utworzony za pomocą pakietu racoon czyli ipsec. Opisany sposób został przetestowany na routerze Linksys AG241v2-EU w jednym końcu tunelu w połączeniu z Debian Lenny na drugim końcu. Jeden routery ma adres IP statyczny (Debian) czyli nie zmienia się po drugiej zaś stronie stoi router AG241 z adresem dynamicznym (czyli ADSL).-zmieniającym się. Oba adresy MUSZĄ być adresami publicznymi. Nie będe w tym artykule opisywał instalacji w Debianie Racoon. Opis dotyczy tylko Openwrt ew. podam pliki konfiguracyjne po stronie Debiana.

Jeszcze jedno. Konfiguracji racoon nie można przeprowadzić poprzez narzędzie UCI. Większość rzeczy trzeba zrobić ręcznie.

 

27.07.2010: Konfiguracja zgodna z Backfire 10.03.x. Testowano na wr1043nd.

 

Założenia 

Adres publiczny WAN IP Routera Debian Lenny                    : 218.97.26.22

Adres i maska sieci LAN Routera Debian Lenny                  : 192.168.1.0/24

Adres publiczny WAN IP Routera z Openwrt AG241              : 0.0.0.0/0 - Adres się zmienia więc nie znamy go :)

Adres i maska sieci LAN Routera z Openwrt AG241            : 10.0.0.0/24

 

(10.0.0.0/24)AG241(0.0.0.0) <=============> (218.97.26.22)Debian(192.168.1.0/24)

 

Szyfrowanie ze stałym kluczem/hasłem oparte z jdenej strony na autoryzacji poprzez adres IP (Debian) po drugiej zaś stronie autoryzacja poprzez nazwę fqdn.

Nazwa do autoryzacji dla Routera z Openwrt AG241         : vpn.dyndns.org

 

Ja sobie zdefiniowałem usługę dyndns (dynamicznego dns) i przypisałem do routera i wykorzystałem w tunela hoć ta nazwa nie jest rozwiązywana z dns.

UWAGA!!!: Stroną inicjującą jest TYLKO router AG241 z openwrt czyli ze zmiennym adresem ip.

 

Instalacja

Musimy zainstalować Racoon oraz potrzebne moduły.

opkg install ipsec-tools kmod-crypto-aead kmod-crypto-aes kmod-crypto-authenc kmod-crypto-core kmod-crypto-des kmod-crypto-hmac kmod-crypto-md5 kmod-crypto-sha1 kmod-ipsec kmod-ipsec4

Od wersji Backfire nie ma modułu kmod-crypto-aead

musimy jeszcze utworzyć plik ładujący dodatkowe moduły w czasie startu systemu - są wymagane do poprawnej pracy- UWAGA !!! TYLKO w kamikadze 8.09.x

echo af_key >> /etc/modules.d/10-ipsec
echo ah4 >> /etc/modules.d/10-ipsec
echo esp4 >> /etc/modules.d/10-ipsec
echo xfrm_user >> /etc/modules.d/10-ipsec
echo xfrm4_mode_beet >> /etc/modules.d/10-ipsec
echo xfrm4_mode_transport >> /etc/modules.d/10-ipsec
echo xfrm4_mode_tunnel >> /etc/modules.d/10-ipsec
echo xfrm4_tunnel >> /etc/modules.d/10-ipsec

 

po załadowaniu modułów lsmod powinien wykazać:

xfrm_user              21664  0
tunnel4                 2608  2 xfrm4_tunnel
xfrm4_tunnel            1920  0
xfrm4_mode_tunnel       1952  2
xfrm4_mode_transport     1248  0
xfrm4_mode_beet         2208  0esp4                    6368  1
ah4                     4800  0
af_key                 33552  0
sha1_generic            2144  1
md5                     5024  0
hmac                    3776  1
des_generic            19296  1
authenc                 5280  1
aes_generic            29296  0
aead                    5440  2 esp4,authenc
deflate                 2560  0
ecb                     2336  0
cbc                     3168  1
crypto_blkcipher       15376  4 authenc,ecb,cbc
crypto_hash             3648  2 hmac,authenc
cryptomgr               2688  0
crypto_algapi          11616  12 sha1_generic,md5,hmac,des_generic,authenc,aes_generic,aead,deflate,ecb,cbc,crypto_blkcipher,cryptomgr

 

Konfiguracja racoon po stronie routera AG241 na openwrt

w katalogu /etc/racoon utwórz 4 pliki

touch /etc/racoon/psk.txt

touch /etc/racoon/racoon.conf

touch /etc/racoon/setkey.conf

touch /etc/init.d/racoon

 

oraz nadaj uprawnienia do wykonywania

chmod +x /etc/racoon/setkey.conf

chmod +x /etc/init.d/racoon

chmod 600 /etc/racoon/psk.txt

 

Zawartość pliku setkey.conf powinna wyglądać następująco:

#!/usr/sbin/setkey -f

flush;
spdflush;

#FPW
spdadd 10.0.0.0/24 192.168.1.0/24 any -P out ipsec
esp/tunnel/0.0.0.0-218.97.26.22/require;

spdadd 192.168.1.0/24 10.0.0.0/24 any -P in ipsec
esp/tunnel/218.97.26.22-0.0.0.0/require;

 

Zawartość pliku racoon.conf powinna wyglądać następująco:

path pre_shared_key "/etc/racoon/psk.txt";
#path certificate "/etc/racoon/certs";

log info;

remote 218.97.26.22 {
exchange_mode aggressive;
doi ipsec_doi;
situation_identity_only;
lifetime time 28800 sec;
my_identifier fqdn "vpn.dyndns.org";
peers_identifier address 218.97.26.22;
passive off;
initial_contact on;
#       ike_frag=on;
proposal_check obey;
proposal {
encryption_algorithm 3des;
hash_algorithm md5;
authentication_method pre_shared_key;
dh_group 2;
}
}

sainfo anonymous {
pfs_group 2;
lifetime time 3600 sec;
encryption_algorithm 3des ;
authentication_algorithm hmac_sha1, hmac_md5  ;
compression_algorithm deflate;
}

 

 

Zawartość pliku psk.key powinna wyglądać następująco:

218.97.26.22     twoje_tajne_haslo

 

 

Plik /etc/init.d/racoon winien zawierać:


#!/bin/sh /etc/rc.common

START=60

start() {
echo Uruchamiam tunel ipsec racoon...

if [ ! -e /var/racoon ]
then
mkdir /var/racoon
fi
setkey -f /etc/racoon/setkey.conf
racoon -f /etc/racoon/racoon.conf
}

stop() {
killall racoon
}



a następnie wykonać


/etc/init.d/racoon enable
/etc/init.d/racoon start

 

Konfiguracja firewalla po stronie routera AG241 na openwrt

zawartość pliku /etc/config/firewall powinniśmy uzupełnić o następujące wpisy:

config rule
option src              wan
option proto            esp
option target           ACCEPT

config rule
option src              wan
option proto            ah
option target           ACCEPT

config rule
option src              wan
option proto            ipcomp
option target           ACCEPT

config rule
option dest_port        500
option proto            udp
option target           ACCEPT

config rule
option dest_port        4500
option proto            udp
option target           ACCEPT


config include
option path /etc/firewall.user

 

Reszta konfiguracji firewall w pliku /etc/firewall.user powinna wyglądać następująco:

#regulki dla ipsec
#...................................................
iptables -I forwarding_rule --dst 192.168.1.0/24 -j ACCEPT
iptables -t nat -I postrouting_rule -s 10.0.0.0/24 -d 192.168.1.0/24 -j ACCEPT
iptables -t nat -I postrouting_rule -p ipcomp -j ACCEPT
iptables -t nat -I postrouting_rule -p ah -j ACCEPT
iptables -t nat -I postrouting_rule -p esp -j ACCEPT


Jeśli chcemy dopuści cały z LAN Debian do LAN AG241 ruch musimy dopisać jeszcze jedną regułkę zamiast linii wykropkowanej powyżej

iptables -I forwarding_rule --src 192.168.1.0/24 -j ACCEPT

lub tylko port np.

iptables -I forwarding_rule -p tcp --src 192.168.1.0/24 --dport 5900 -j ACCEPT

oczywiście to można zmienić wedla własnego uznania.

 

Uruchomienie vpn po stronie routera AG241 na openwrt

 

Jeśli wszystko zrobiłeś poprawnie jak pingniesz adres z drugiegej strony tunelu łącze się zestawi. Demon racoon pojawi się w bieżących procesach "ps ax".

 

Jeśli są jakieś problemy to można analizować uruchomienie poprzez:

1. ręcznie uruchom plik ./etc/racoon/setkey.conf

2. uruchom racoon jako proces nie demon: racoon -F -f /etc/racoon/racoon.conf ew. więcej informacji uzyskasz uruchamiając:

racoon -F -v -f /etc/racoon/racoon.conf

 

Jeśli chcemy zestawić tunel ręcznie wywołujemy na routerze komendę:

racoon vc 218.97.26.22

do wyłączenia ręcznego tunelu wykorzystujemy komendę

racoon vd 218.97.26.22

 

UWAGA !!! ERRATA

W Backfire ostatnich wydania jest błąd który winien zostać poprawiony. Niestety developerzy tak przerobili firewalla że nie da się w żaden sposób wstawić na początek głównych łańcuchów własnych reguł iptables. Jeśli masz problemy z nawiązaniem połączenia zerknij koniecznie na reguły firewalla

iptables -t nat -L -v

w szczególności łańcuchów POSTROUTING. Nasze reguły dodane do firewalla MUSZĄ być przed łańcuchami

zone_lan_nat
zone_wan_nat

inaczej nie będzie poprawnie działał tunel

Czyli jeśli masz np. taką kolejność

Chain POSTROUTING (policy ACCEPT 246 packets, 18433 bytes)
pkts bytes target     prot opt in     out     source               destination
854 61486 zone_wan_nat  all  --  any    eth0.2  anywhere             anywhere
1    84 zone_lan_nat  all  --  any    br-lan  anywhere             anywhere
246 18433 postrouting_rule  all  --  any    any     anywhere             anywhere

to nie będą działać wpisy w postrouting_rule. Nawet jak dodasz reguły w /etc/firewall.user do głównego łańcucha POSTROUTING to przynajmniej na dzień dzisiejszy reguły zostaną dodane za łańcuchami zone_lan_nat i zone_wan_nat

Jedynym rozwiązaniem jest przeniesienie naszych reguł do skryptu uruchamiającego firewall /etc/init.d/racoon

Czyli usuwamy nasze wpisy z pliky /etc/firewall.user i wstawiamy je np. tak jak poniżej:

Plik /etc/init.d/racoon winien zawierać:


#!/bin/sh /etc/rc.common

START=98

start() {
echo Uruchamiam tunel ipsec racoon...

if [ ! -e /var/racoon ]
then
mkdir /var/racoon
fi
setkey -f /etc/racoon/setkey.conf
racoon -f /etc/racoon/racoon.conf

#regulki dla ipsec
#...................................................
iptables -I forwarding_rule --dst 192.168.1.0/24 -j ACCEPT
iptables -t nat -I postrouting_rule -s 10.0.0.0/24 -d 192.168.1.0/24 -j ACCEPT
iptables -t nat -I postrouting_rule -p ipcomp -j ACCEPT
iptables -t nat -I postrouting_rule -p ah -j ACCEPT
iptables -t nat -I postrouting_rule -p esp -j ACCEPT

}

stop() {
killall racoon

#regulki dla ipsec
#...................................................
iptables -D forwarding_rule --dst 192.168.1.0/24 -j ACCEPT
iptables -t nat -D postrouting_rule -s 10.0.0.0/24 -d 192.168.1.0/24 -j ACCEPT
iptables -t nat -D postrouting_rule -p ipcomp -j ACCEPT
iptables -t nat -D postrouting_rule -p ah -j ACCEPT
iptables -t nat -D postrouting_rule -p esp -j ACCEPT

}

 

Alternatywą w/w zmian jest uaktualnienie pakietu firewall do najnowszej wersji

opkg install http://ecco.selfip.net/backfire/packages/firewall_2-21_all.ipk

po wgraniu w/w aktualizacji reguły spokojnie mogą zostać jak w oryginalnym opisie.

 

Pliki konfiguracyjne po stronie Debian Lenny:

zawartość pliku /etc/ipsec-tools.conf powinniśmy uzupełnić o następujące wpisy - czyli dla naszego przypadku pozostaje pusty bez wpisów dla naszego tunelu:

#!/usr/sbin/setkey -f

## Flush the SAD and SPD
#
# flush;
# spdflush;

## Some sample SPDs for use racoon
#


 

zawartość pliku /etc/racoon/psk.key powinniśmy uzupełnić o następujące wpisy:

vpn.dyndns.org twoje_tajne_haslo

 

zawartość pliku /etc/racoon/racoon.conf powinniśmy uzupełnić o następujące wpisy:


path pre_shared_key "/etc/racoon/psk.txt";
#path certificate "/etc/racoon/certs";

log info;
listen
{
isakmp 218.97.26.22
[500];
strict_address;
}


remote anonymous {
exchange_mode aggressive,main;
doi ipsec_doi;
situation_identity_only;
lifetime time 28800 sec;
my_identifier address 217.96.21.2;
peers_identifier fqdn "vpn.dyndns.org";
passive on;
initial_contact off;
#       ike_frag=on;
proposal_check obey;
proposal {
encryption_algorithm 3des;
hash_algorithm md5;
authentication_method pre_shared_key;
dh_group 2;
}
generate_policy on;
}


sainfo anonymous {
pfs_group 2;
lifetime time 3600 sec;
encryption_algorithm 3des ;
authentication_algorithm hmac_sha1 ,hmac_md5 ;
compression_algorithm deflate;
}

 

Musimy jeszcze pamiętać o firewallu:

#negowanie na INPUT vpn ikea oraz ogolnie vpn zezwolenie
/sbin/iptables -A INPUT -p udp --dport 500 -j ACCEPT
/sbin/iptables -A INPUT -p udp --dport 4500 -j ACCEPT
/sbin/iptables -A INPUT -p esp -j ACCEPT
/sbin/iptables -A INPUT -p ah -j ACCEPT
/sbin/iptables -A INPUT -p ipcomp -j ACCEPT

 

#..............................................................

/sbin/iptables -A FORWARD --src 192.168.1.0/24 --dst 10.0.0.0/24 -j ACCEPT


/sbin/iptables -t nat -A POSTROUTING -p esp -j ACCEPT
/sbin/iptables -t nat -A POSTROUTING -p ah -j ACCEPT
/sbin/iptables -t nat -A POSTROUTING -p ipcomp -j ACCEPT
/sbin/iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -d 10.0.0.0/24  -j ACCEPT
/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

gdzie eth0 jest interfejsem WAN o adresie 218.97.26.22 .

Koniecznie wpisy w POSTROUTING muszą być przed MASQUERADE.

 

Jeśli chcemy dopuści cały z LAN AG241 do LAN w Debianie ruch musimy dopisać jeszcze jedną regułkę zamiast linii wykropkowanej powyżej

/sbin/iptables -A FORWARD --src 10.0.0.0/24 -j ACCEPT

lub tylko port np.

/sbin/iptables -A FORWARD -p tcp --src 10.0.0.0/24 --dport 5900 -j ACCEPT

 

Reszty należy szukać w odpowiednich HOWTO iptablesa, racoon, ipsec, itp.

 

Ps. Jeśli chciałbyś przekompilować openwrt np. do wersji 8.09 to poniższe pozycje są potrzebne do działania VPN:

Network->ipsec-tools

Kernel modules -> Network support->kmod-gre

Kernel modules -> Network support->kmod-ipsec

Kernel modules -> Network support->kmod-ipsec4

Kernel modules -> Network support->kmod-iptunnel4

Kernel modules -> Netfilter extensions->kmod-ipt-ipsec

Kernel modules->Cryptographics API modules->kmod-crypto-aes

Kernel modules->Cryptographics API modules->kmod-crypto-authenc

Kernel modules->Cryptographics API modules->kmod-crypto-aead

Kernel modules->Cryptographics API modules->kmod-crypto-core

Kernel modules->Cryptographics API modules->kmod-crypto-des

Kernel modules->Cryptographics API modules->kmod-crypto-hmac

Kernel modules->Cryptographics API modules->kmod-crypto-md5

Kernel modules->Cryptographics API modules->kmod-crypto-sha1



Podziel się tą informacja z innymi:
Poprawiony: piątek, 18 lutego 2011 17:37