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 adresy statyczne szyfrowanie plain rsa
 
 
Racoon czyli ipsec - VPN adresy statyczne szyfrowanie plain rsa Drukuj Email
Wpisany przez rpc   
poniedziałek, 12 października 2009 06:45

Racoon czyli ipsec - VPN adresy statyczne szyfrowanie kluczem plain rsa - linux 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. Oba routery mają adresy IP statyczne czyli nie zmieniają 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              : 87.205.205.13

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

 

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

 

Szyfrowanie za pomocą pary kluczy  Plain RSA

 

Nazwa ID tunelu od strony Debian: vpn.dyndns.org

Nazwa ID tunelu od strony AG241 : iyy99.internetdsl.tpnet.pl

Nie muszą być to nazwy DNS mogą być dowolne.

 

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 i 1 katalog

touch /etc/racoon/psk.txt

touch /etc/racoon/racoon.conf

touch /etc/racoon/setkey.conf

touch /etc/init.d/racoon

mkdir /etc/racoon/certs

 

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/87.205.205.13-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-87.205.205.13/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;
listen
{
isakmp 87.205.205.13 [500];
}

remote 218.97.26.22 {
exchange_mode main;
doi ipsec_doi;
situation_identity_only;
lifetime time 28800 sec;
certificate_type plain_rsa " 87.205.205.13_privatekey.rsa";
peers_certfile plain_rsa "
218.97.26.22 _publickey.rsa";
my_identifier fqdn "
iyy99.internetdsl.tpnet.pl";
peers_identifier fqdn "
vpn.dyndns.org";
passive off;
initial_contact on;
#       ike_frag=on;
proposal_check obey;
proposal {
encryption_algorithm aes;
hash_algorithm sha1;
authentication_method rsasig;
dh_group 2;
}
generate_policy off;
}

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

 

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
}

 

Generowanie kluczy Plain RSA na routerze AG241

Przechodzimy do katalogu /etc/racoon/certs

cd /etc/racoon/certs

i wywołujemy polecenie:

plainrsa-gen -f /etc/racoon/certs/87.205.205.13_privatekey.rsa

W wyniku utworzy nam się plik z kluczem prywatnym RSA. Teraz musimy wydzielić klucz publiczny z tego pliku. Wykonujemy wywołując:

grep ": PUB" 87.205.205.13_privatekey.rsa | sed 's/^#//' > /etc/racoon/certs/87.205.205.13_publickey.rsa

Ten plik należy przekopiować do drugiego routera Debian do katalogu /etc/racoon/certs/87.205.205.13_publickey.rsa

 

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 bierzą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

 

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:

#!/usr/sbin/setkey -f

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

## Some sample SPDs for use racoon
#

spdadd 192.168.10.0/24 10.0.0.0/24 any -P out ipsec
esp/tunnel/218.97.26.22
-87.205.205.13/require;

spdadd 10.0.0.0/24 192.168.10.0/24 any -P in ipsec
esp/tunnel/87.205.205.13
-218.97.26.22/require;

 

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];
}


remote 87.205.205.13 {
exchange_mode main;
doi ipsec_doi;
situation_identity_only;
lifetime time 28800 sec;
certificate_type plain_rsa "218.97.26.22_privatekey.rsa";
peers_certfile plain_rsa "87.205.205.13
_publickey.rsa";
my_identifier fqdn "vpn.dyndns.org";
peers_identifier fqdn "iyy99.internetdsl.tpnet.pl";

passive on;
initial_contact off;
#       ike_frag=on;
proposal_check obey;
proposal {
encryption_algorithm aes,3des;
hash_algorithm sha1;
authentication_method rsasig;
dh_group 2;
}
generate_policy off;
}


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

 

Generowanie Kluczy plain RSA po stronie routera Debian

Przechodzimy do katalogu /etc/racoon/certs

cd /etc/racoon/certs

i wywołujemy polecenie:

plainrsa-gen -f /etc/racoon/certs/218.97.26.22_privatekey.rsa

W wyniku utworzy nam się plik z kluczem prywatnym RSA. Teraz musimy wydzielić klucz publiczny z tego pliku. Wykonujemy wywołując:

grep ": PUB" 218.97.26.22_privatekey.rsa | sed 's/^#//' > /etc/racoon/certs/218.97.26.22 _publickey.rsa

Ten plik należy przekopiować do drugiego routera AG241 z openwrt do katalogu /etc/racoon/certs/218.97.26.22 _publickey.rsa

 

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

 

Ps2.

Przykład dotyczy debiana ale testowałem i działa z openwrt oraz Asmax BR-604G patrz opis

Trzeba sobie dostosować odpowiednio ale schemat jest ten sam



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