Daca dormi pana la 12, bei cafea la 16 si seara mananci ciocolata, e posibil sa te apuce dimineata uitandu-te la seriale ca nu ti-e somn.
03:49
Daca dormi pana la 12, bei cafea la 16 si seara mananci ciocolata, e posibil sa te apuce dimineata uitandu-te la seriale ca nu ti-e somn.
03:49
Cand ti-e foame si n-ai nimic de mancat prin casa, ketchup-ul este un aliment minunat si plin de vitamine :)
DNS-ul este unul din protocoalele care reprezinta coloana verterbrala a Internetului. Cand a fost inventat, securitatea nu a fost luata in calcul pentru ca s-a mers pe ideea ca toti utilizatorii o sa fie cinstiti, lucru care s-a dovedit un pic fals. DNS-ul a fost abuzat de tot felul de oameni pentru diverse scopuri, mai mult sau mai putin oneroase.
Cele mai intalnite abuzuri asupra lui sunt “cache poisoning” si Man-in-the-Middle (MITM).
Pentru a face protocolul rezilient asupra acestor doua tipuri majore de atacuri si pentru a putea lansa noi servicii sigura bazate pe DNS, un grup de oameni destepti s-au gandit sa adauge si securitate la protocol. Pentru ca e relativ mult de vorbit despre partea de securitate si ideile nu vin toate o data, exista vreo 3 RFC-uri mari care acopera specificatiile de DNSSEC: 4033, 4034 si 4035.
Pe scurt, o autoritate centrala va garanta in jos “zonele” de DNS pana la ultimul domeniu astfel incat daca un server de DNS care stie de DNSSEC trebuie sa rezolve un nume de host sau de domeniu, va putea verifica foarte usor ca raspunsurile primite nu au fost modificate in tranzit de catre o terta parte.
DNSSEC foloseste doua tipuri de chei:
Ca si tipuri de inregistrari, atunci cand avem DNSSEC, avem:
“Trust anchors” reprezinta mecanismul prin care un server de DNS are incredere in anumite semnaturi pentru domenii. Echivalentul ar fi “root hints” sau in PKI: lista autoritatilor de certificare in care are incredere (Trusted Root CAs).
Acum, partea practica :)
Si pentru ca mi-am dorit mereu un TLD, o sa-l numesc .imacandi. pentru postul asta si o sa avem asa:
[root "."] => [TLD "imacandi."] => [domeniu "sin.imacandi."]
Plus un resolver pe langa astea care are doar cheia publica a “.” si va face rezolvare recursiva pentru $hostname.sin.imacandi.net.
Servere si adrese IP:
(da stiu ca pe poza sunt mai multe servere, da m-a luat desenatul pe dinainte si dupa aia mi-am dat seama ca ma pot descurca si cu mai putine)
Ca si software voi folosi BIND 9.9.4 pe CentOS 7 (default).
Prima oara semnam “.”
root@dns-s-1 named]# dnssec-keygen -a NSEC3RSASHA1 -b 2048 -n ZONE . Generating key pair....+++ ...................+++ K.+007+64334 [root@dns-s-1 named]# dnssec-keygen -f KSK -a NSEC3RSASHA1 -b 4096 -n ZONE . Generating key pair...................................................++ ......................................................................................................................................................++ K.+007+28638 [root@dns-s-1 named]# for key in `ls K*key`; do echo "\$INCLUDE $key" >> named.ca ; done [root@dns-s-1 named]# cat named.ca $TTL 3600 @ IN SOA dns-s-1.root-servers.net. hostmaster.root-servers.net. ( 2012071200 ; serial number YYMMDDNN 28800 ; Refresh 7200 ; Retry 864000 ; Expire 3600 ; Min TTL ) NS dns-s-1.root-servers.net. $ORIGIN . dns-s-1.root-servers.net. 3600 IN A 172.16.155.101 $INCLUDE K.+007+28638.key $INCLUDE K.+007+64334.key [root@dns-s-1 named]# dnssec-signzone -A -3 $(head -c 1000 /dev/urandom | sha1sum | cut -b 1-16) -N INCREMENT -o . -t named.ca Verifying the zone using the following algorithms: NSEC3RSASHA1. Zone fully signed: Algorithm: NSEC3RSASHA1: KSKs: 1 active, 0 stand-by, 0 revoked ZSKs: 1 active, 0 stand-by, 0 revoked named.ca.signed Signatures generated: 10 Signatures retained: 0 Signatures dropped: 0 Signatures successfully verified: 0 Signatures unsuccessfully verified: 0 Signing time in seconds: 0.022 Signatures per second: 447.407 Runtime in seconds: 0.026
Modificam /etc/named.conf astfel:
zone "." { type master; file "named.ca.signed"; };
Apoi restartam named si in loguri o sa zica urmatoarele (printre altele):
Mar 28 14:13:34 dns-s-1 named[2338]: zone ./IN: loaded serial 2012071201 (DNSSEC signed)
Acum avem “.” semnat (self-signed ca e root, nu exista autoritate mai mare ca .)
Dupa “.” urmeaza crearea unui TLD (Top Level Domain), si anume imacandi. Pentru asta adaugam urmatoarele inregistrari in zona “.”:
imacandi. IN NS ns1.dns.imacandi. ns1.dns.imacandi. IN A 172.16.155.102
Acum ca zona a fost modificata, trebuie re-semnata si dupa aceea reincarcata de BIND.
dnssec-signzone -A -3 $(head -c 1000 /dev/urandom | sha1sum | cut -b 1-16) -N INCREMENT -o . -t named.ca [root@dns-s-1 named]# rndc reload server reload successful
Acum trecem pe dns-s-2 si cream configurarile necesare pentru noua zona, chain of trust cu “.” si importul inregistrarilor de tip DS in “.”.
In primul rand, modificam /etc/named.conf astfel:
trusted-keys { "." 257 3 7 "AwEAAa8SV9IPDSXr+THXuogKOGxCvERdRf39cJ9spETd22AgVRYTI1Tr C57FXGtcC+tGa0AYs9chGsZ8eNwGD76YdnydD8CT+tLfokbVHih0ewQz RiobvXE4UY7HycrnC+ZY9yToM4ktKSsX1YWFsNGcIBn60c5J39LbAJ/i bB2+TCvdJNE4jrHkP4pf/onXJvG/RMFllShMtmOqgn1y79yJGTwoO2ab Rbm4kV3qDKiLtfrmyLqJTGbKf+R98NTpe1ufPnQCDwV13xlNRlsok8Gz cFDjTNf6ZepQ2wF8CzpDYHK7/tANCEFgR0vOzYkb8VkkaEzMUCYOveqp wy8e+isoDtoBA1e48awEYo3o+YN1DVEbCoR4Xbdy4cf+qkXv0nS8QNar 0RHSjghmsQddDVMoFaYLWv8lqSCd1uQufSnMd1okv3nEyKIwWBB3xG5r x7GJpqMtqA4BRWcv28tGgPkbFaWMkjVPqUIBgyk87fAB+a1H51uy0J1K Q+99U+8/41m6mnNoa2kjxJL53dYcf0DO4eUgsRY2LcO6etk/XbHm9/+M GOfes0pmPJ8V3Yb2V1J5WV62sYaPrvw+jh3h2V5RvNW+QHZ6U5M73eWZ w8vYyygYl3sWHy03vX4mQnq2XsMJ0CDvR+XLWG98RpItYG65LwhiayRP +dDhJpSyOY3aeXLD"; }; zone "imacandi." IN { type master; file "imacandi."; };
In zona “imacandi.” se trec urmatoarele:
$TTL 3600 @ IN SOA ns1.dns.imacandi. hostmaster.dns.imacandi. ( 2012071203 ; serial number YYMMDDNN 28800 ; Refresh 7200 ; Retry 864000 ; Expire 3600 ; Min TTL ) NS ns1.dns.imacandi. ns1.dns.imacandi. 3600 IN A 172.16.155.102 $ORIGIN imacandi. sin IN NS dns1.sin.imacandi. dns1.sin IN A 172.16.155.103
Dupa ce avem configurata zona, trecem la crearea cheilor KSK si ZSK si dupa aia semnam zona.
[root@dns-s-2 named]# dnssec-keygen -a RSASHA256 -b 2048 -n ZONE imacandi. Generating key pair.............+++ ....+++ Kimacandi.+008+03645 [root@dns-s-2 named]# dnssec-keygen -f KSK -a RSASHA256 -b 2048 -n ZONE imacandi. Generating key pair.......................................................................+++ ..................+++ Kimacandi.+008+35377
Adaugam cheile in fisierul de zona:
$INCLUDE Kimacandi.+008+03645 $INCLUDE Kimacandi.+008+35377
Si semnam zona:
[root@dns-s-2 named]# dnssec-signzone -N INCREMENT -o imacandi. -t imacandi. Verifying the zone using the following algorithms: RSASHA256. Zone fully signed: Algorithm: RSASHA256: KSKs: 1 active, 0 stand-by, 0 revoked ZSKs: 1 active, 0 stand-by, 0 revoked imacandi..signed Signatures generated: 8 Signatures retained: 0 Signatures dropped: 0 Signatures successfully verified: 0 Signatures unsuccessfully verified: 0 Signing time in seconds: 0.009 Signatures per second: 833.159 Runtime in seconds: 0.012
Dupa semnare, luam datele despre DS si le adaugam in zona parinte:
imacandi. IN DS 35377 8 1 16085596E91E80E95E70FA8EABE646A25499967E imacandi. IN DS 35377 8 2 818FB42E72B000DCD9621F9F78D85845C25BAC44566CD4B687543C1B A874B6C5
Si re-semnam zona parinte.
Pe dns-s-3 am creat zona sin.imacandi.
zone "sin.imacandi" IN { type master; file "sin.imacandi.signed"; };
Dupa aceea am creat cheile de semnare:
[root@dns-s-3 named]# dnssec-keygen -a NSEC3RSASHA1 -b 2048 -n ZONE sin.imacandi Generating key pair............................................+++ ..................................+++ Ksin.imacandi.+007+43763 [root@dns-s-3 named]# dnssec-keygen -f KSK -a NSEC3RSASHA1 -b 4096 -n ZONE sin.imacandi Generating key pair.......++ ................++ Ksin.imacandi.+007+02085
Le-am adaugat in zona si dupa am semnat zona:
[root@dns-s-3 named]# dnssec-signzone -A -3 $(head -c 1000 /dev/urandom | sha1sum | cut -b 1-16) -N INCREMENT -o sin.imacandi -t sin.imacandi Verifying the zone using the following algorithms: NSEC3RSASHA1. Zone fully signed: Algorithm: NSEC3RSASHA1: KSKs: 1 active, 0 stand-by, 0 revoked ZSKs: 1 active, 0 stand-by, 0 revoked sin.imacandi.signed Signatures generated: 12 Signatures retained: 0 Signatures dropped: 0 Signatures successfully verified: 0 Signatures unsuccessfully verified: 0 Signing time in seconds: 0.022 Signatures per second: 543.084 Runtime in seconds: 0.026
Iar pentru validare, in configuratia lui BIND am adaugat cheia pentru “.” pe dns-s-3 in named.conf:
trusted-keys { "." 257 3 7 "AwEAAa8SV9IPDSXr+THXuogKOGxCvERdRf39cJ9spETd22AgVRYTI1Tr C57FXGtcC+tGa0AYs9chGsZ8eNwGD76YdnydD8CT+tLfokbVHih0ewQz RiobvXE4UY7HycrnC+ZY9yToM4ktKSsX1YWFsNGcIBn60c5J39LbAJ/i bB2+TCvdJNE4jrHkP4pf/onXJvG/RMFllShMtmOqgn1y79yJGTwoO2ab Rbm4kV3qDKiLtfrmyLqJTGbKf+R98NTpe1ufPnQCDwV13xlNRlsok8Gz cFDjTNf6ZepQ2wF8CzpDYHK7/tANCEFgR0vOzYkb8VkkaEzMUCYOveqp wy8e+isoDtoBA1e48awEYo3o+YN1DVEbCoR4Xbdy4cf+qkXv0nS8QNar 0RHSjghmsQddDVMoFaYLWv8lqSCd1uQufSnMd1okv3nEyKIwWBB3xG5r x7GJpqMtqA4BRWcv28tGgPkbFaWMkjVPqUIBgyk87fAB+a1H51uy0J1K Q+99U+8/41m6mnNoa2kjxJL53dYcf0DO4eUgsRY2LcO6etk/XbHm9/+M GOfes0pmPJ8V3Yb2V1J5WV62sYaPrvw+jh3h2V5RvNW+QHZ6U5M73eWZ w8vYyygYl3sWHy03vX4mQnq2XsMJ0CDvR+XLWG98RpItYG65LwhiayRP +dDhJpSyOY3aeXLD"; };
Iar pe dns-s-2 am adaugat inregistrarile de tip DS si am resemnat zona imacandi.:
sin.imacandi. IN DS 2085 7 1 E1B11E776525C73D7E7484817F57F4F9BDDFAB53 sin.imacandi. IN DS 2085 7 2 FC19462CA30C80691DAF2FFB6847130F7384BB9DAA82199FFDA60415 90976C45
Acum situatia este in felul urmator: dns-s-1 este autoritativ pentru “.” si contine inregistrari de tip DS pentru “imacandi.”, dns-s-2 este autoritativ pentru “imacandi.” si contine inregistrari de tip DS pentru “sin.imacandi.”, dns-s-3 este autoritativ pentru “sin.imacandi.” si contine inregistrari de tip A pentru teste.
Un query recursiv pe dns-s-2 pentru un host numit bumblebee.sin.imacandi. care este definit in zona de pe dns-s-3 arata asa:
[root@dns-s-3 named]# dig +dnssec -t A bumblebee.sin.imacandi. @172.16.155.102 +multiline ; <<>> DiG 9.9.4-RedHat-9.9.4-14.el7_0.1 <<>> +dnssec -t A bumblebee.sin.imacandi. @172.16.155.102 +multiline ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14987 ;; flags: qr rd ra ad; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 1 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags: do; udp: 4096 ;; QUESTION SECTION: ;bumblebee.sin.imacandi. IN A ;; ANSWER SECTION: bumblebee.sin.imacandi. 3521 IN A 172.16.155.104 bumblebee.sin.imacandi. 3521 IN RRSIG A 7 3 3600 ( 20150427161417 20150328161417 43763 sin.imacandi. E9AQRx+ns1ZrmoPw+TduURzS8cGBAftivGEBBh1W75/u yZ24tGQQ6bmmYQK84YO39qj2JDLANH06212Co0/emBjJ Ug//YU+06nwT/fRu8vp/VL1u/8F3rSAGT5KSai1cFnjM Tt/c+urWzAmw9CzxwBO4QE9NCth8jT35tblfUSuTN0xy lOeTnTPqXvyTYNRm0HxygqIgEDC4K3PdDbZbYAT02djj /S8upDBZydJb3KuuHRvIZ6n4k0SKAyKChdCABFEGgM/M qPozD0gU52nYuUlR0fbfY844eqQfnRMNJvfIcY3xYb3h yidsFSwqgxs0vynCriefAVu/IxpAptlHpw== )
Important este flag-ul AD din raspuns care inseamna Authenticated Data, asta inseamna ca serverul care raspunde poate verifica tot lantul si “chain of trust” este intact.
Mai sunt cateva aspecte pe care intentionez sa le exemplific intr-un post urmator candva:
Cam asta e din categoria ce mai face sin sambata cand ploua afara :)
Ma tot oftic ca nu l-am prins cand era la IMAX, ca este super mega cool.
Cu toate arestarile si perchezitiile in zori de ziua de tot scria presa, ma gandeam la o chestie: astia de tin chestii in casa sunt complet imbecili. Adica toti au usi care se deschid spre interior si pe care daca le dai cu berbecul de multe ori pana la urma cedeaza, iar cele mai multe cedeaza aproape instant. Si e o practica comuna, ceea ce ma face sa ma gandesc ca pe langa faptul ca’s imbecili, mai sunt si zgarciti.
Adica sa-si ia o usa care se dechise spre exterior (cam cum sunt alea de seif ca idee) si fara locuri unde ai putea baga levier/ranga s-o poti deschide. Daca faci o combinatie si la geamuri in cam acelasi stil, poti scapa de probe in linisite si dupa aia deschizi usa si zici “Am auzit zgomot pe hol, este totul in ordine, domnilor ofiteri?”.
Azi fusei la Laser Tag cu niste oameni, printre care si niste israelieni. Si cei din urma fumatori. Locatia avea camera dedicata pentru fumatori ca sa nu miroasa a fum peste tot. Si pe usa de la camera aia era un afis: Camera de Gazare.
Se pare ca la partea cu un singur ASN puneam problema gresit:
Initial aveam asa pe vpn-hub spre vpn-gw-a:
route-map A permit 1 match origin igp set ip next-hop 192.168.168.1
route-map-ul era aplicat asa:
neighbor 192.168.168.2 route-map A out
Care teoretic ar fi trebuit sa schimbe next-hop din anunturi in ce i-am zis io mai sus.
Cu un hint de la gabim ca nu trebuie sa fac match pe nimic ci doar sa setez ip next-hop, asa ca am lasat doar varianta cu set ip next-hop. Dar tot fara noroc.
Ma mai scarpinai un pic si ajunsei la alta combinatie care se pare ca merge: pun route-map pe in pe gateway-uri si nu mai fac nimic pe vpn-hub, lucru care se pare ca merge. Plus bonus points ca setand next-hop ca peer-address ma doare la bachetzi cine e peer-ul, deci pot sa fac template.
route-map set-nh permit 1 set ip next-hop peer-address
Care se aplica asa:
neighbor 192.168.168.1 remote-as 4200000000 neighbor 192.168.168.1 route-map set-nh in
Iar pe vpn-hub arata in felul urmator:
neighbor 192.168.168.2 remote-as 4200000000 neighbor 192.168.168.2 route-reflector-client
Pentru confirmare ca functioneaza treaba:
vpn-gw-a# sh ip bgp 172.16.3.0/24 BGP routing table entry for 172.16.3.0/24 Paths: (1 available, best #1, table Default-IP-Routing-Table) Not advertised to any peer Local 192.168.168.1 (metric 1) from 192.168.168.1 (192.168.168.10) Origin IGP, metric 0, localpref 100, valid, internal, best Originator: 192.168.168.10, Cluster list: 192.168.168.9 Last update: Sat Mar 21 21:55:27 2015
zebra instaleaza ruta corect:
[root@vpn-gw-a ~]# ip r l 172.16.3.0/24 172.16.3.0/24 via 192.168.168.1 dev to-hub proto zebra
Ping:
[root@vpn-gw-a ~]# ping 172.16.3.1 -I172.16.1.1 -c3 PING 172.16.3.1 (172.16.3.1) from 172.16.1.1 : 56(84) bytes of data. 64 bytes from 172.16.3.1: icmp_seq=1 ttl=63 time=1.99 ms 64 bytes from 172.16.3.1: icmp_seq=2 ttl=63 time=1.37 ms 64 bytes from 172.16.3.1: icmp_seq=3 ttl=63 time=1.37 ms --- 172.16.3.1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2006ms rtt min/avg/max/mdev = 1.376/1.582/1.993/0.290 ms
De asta imi place mie BGP-ul, ca poti sa-l violezi in cele mai oribile moduri (ca ce-am facut mai sus e viol cu perversiuni) si tot functioneaza bine :))
Pe vpn-hub pot sa pun un peer-group imens in care ii strang pe toti, iar pe gateway-uri peer-address. Asa iti vin ideile, facand stuff :)
Teoretic, ar fi mers route-map-ul si pe vpn-hub cum il pusesem inainte, insa se pare ca implementare de quagga nu face stuff cand pui route-map pe out. Dar bine ca merge pe in.
Asa ca pot folosi un singur ASN indiferent de cati neighbor-i am. Acum as putea sa-mi pun un pahar de vin ca am intuit ca se poate, doar ca a durat ceva pana m-am prins si cum.
In mod traditional pentru schimbul de informatii considerate sensibile intre doua companii, indiferent de aplicatie, se stabileste o conexiune IPSec (da, stiu ca mai exista si OpenVPN dar nu se pune ca nu este suportat comercial pentru interoperare). Si treaba asta merge OK cand ai nu numar rezonabil de parteneri, dupa aia nu mai este chiar asa distractiv.
Cand ai o companie mare cu multe locatii, atunci se ajunge la configuratii de tipul Hub-and-Spoke fie configurate manual fie automat folosind DMVPN/GETVPN in functie de necesitati si situatie individuala.
Acum, cum impaci capra cu varza, sa ai o configuratia din asta dar intre companii, un fel de serviciu de IPSec-as-a-Service, ceva de genul:
Unde VPN HUB este un la “provider” iar gateway-urile de VPN sunt la “clienti”. Si asta se poate extinde pana terminam alfabetul si o luam cu VPN Gateway AA pana la VPN Gateway ZZZZZ.
Cum ar functiona toata treaba asta fara sa se strice si sa fie scalabila? Teoretic ar fi in felul urmator:
De ce BGP? Pai pentru ca:
Ideea de baza ar fi in felul urmator:
Pentru validare mi-am facut un setup de test care arata cam asa:
Setarile sunt facute astfel:
internet-router este o masina care sa simuleze “internetul” in sensul de un hop intermediar intre gateway-urile de VPN si concentrator.
Prima oara am setat tunele VPN (pentru test le-am facut cu PSK ca e mai usor):
conn to-vpn-gw-a authby=secret auto=start type=transport left=10.15.0.1 leftnexthop=10.15.0.2 right=10.16.0.2 rightnexthop=10.16.0.1
conn to-vpn-gw-b authby=secret auto=start type=transport left=10.15.0.1 leftnexthop=10.15.0.2 right=10.16.0.3 rightnexthop=10.16.0.1
conn to-vpn-gw-c authby=secret auto=start type=transport left=10.15.0.1 leftnexthop=10.15.0.2 right=10.16.0.4 rightnexthop=10.16.0.1
10.15.0.1 10.16.0.2: PSK "supersecret" 10.15.0.1 10.16.0.3: PSK "supersecret" 10.15.0.1 10.16.0.4: PSK "supersecret"
conn to-vpn-hub authby=secret auto=start type=transport left=10.16.0.2 leftnexthop=10.16.0.1 right=10.15.0.1 rightnexthop=10.15.0.2
10.16.0.2 10.15.0.1: PSK "supersecret"
conn to-hub authby=secret auto=start type=transport right=10.15.0.1 rightnexthop=10.15.0.2 left=10.16.0.3 leftnexthop=10.16.0.1
10.16.0.3 10.15.0.1: PSK "supersecret"
conn to-hub authby=secret auto=start type=transport right=10.15.0.1 rightnexthop=10.15.0.2 left=10.16.0.4 leftnexthop=10.16.0.1
10.16.0.4 10.15.0.1: PSK "supersecret"
stats db_ops: {curr_cnt, total_cnt, maxsz} :context={0,0,0} trans={0,0,0} attrs={0,0,0} "to-vpn-gw-a": 10.15.0.1<10.15.0.1>[+S=C]---10.15.0.2...10.16.0.1---10.16.0.2<10.16.0.2>[+S=C]; erouted; eroute owner: #2 "to-vpn-gw-a": myip=unset; hisip=unset; "to-vpn-gw-a": ike_life: 3600s; ipsec_life: 28800s; rekey_margin: 540s; rekey_fuzz: 100%; keyingtries: 0; nat_keepalive: yes "to-vpn-gw-a": policy: PSK+ENCRYPT+PFS+UP+IKEv2ALLOW+SAREFTRACK+lKOD+rKOD; prio: 32,32; interface: eth0; "to-vpn-gw-a": dpd: action:clear; delay:0; timeout:0; "to-vpn-gw-a": newest ISAKMP SA: #16; newest IPsec SA: #2; "to-vpn-gw-a": IKE algorithm newest: AES_CBC_128-SHA1-MODP2048 "to-vpn-gw-b": 10.15.0.1<10.15.0.1>[+S=C]---10.15.0.2...10.16.0.1---10.16.0.3<10.16.0.3>[+S=C]; erouted; eroute owner: #7 "to-vpn-gw-b": myip=unset; hisip=unset; "to-vpn-gw-b": ike_life: 3600s; ipsec_life: 28800s; rekey_margin: 540s; rekey_fuzz: 100%; keyingtries: 0; nat_keepalive: yes "to-vpn-gw-b": policy: PSK+ENCRYPT+PFS+UP+IKEv2ALLOW+SAREFTRACK+lKOD+rKOD; prio: 32,32; interface: eth0; "to-vpn-gw-b": dpd: action:clear; delay:0; timeout:0; "to-vpn-gw-b": newest ISAKMP SA: #18; newest IPsec SA: #7; "to-vpn-gw-b": IKE algorithm newest: AES_CBC_128-SHA1-MODP2048 "to-vpn-gw-c": 10.15.0.1<10.15.0.1>[+S=C]---10.15.0.2...10.16.0.1---10.16.0.4<10.16.0.4>[+S=C]; erouted; eroute owner: #11 "to-vpn-gw-c": myip=unset; hisip=unset; "to-vpn-gw-c": ike_life: 3600s; ipsec_life: 28800s; rekey_margin: 540s; rekey_fuzz: 100%; keyingtries: 0; nat_keepalive: yes "to-vpn-gw-c": policy: PSK+ENCRYPT+PFS+UP+IKEv2ALLOW+SAREFTRACK+lKOD+rKOD; prio: 32,32; interface: eth0; "to-vpn-gw-c": dpd: action:clear; delay:0; timeout:0; "to-vpn-gw-c": newest ISAKMP SA: #17; newest IPsec SA: #11; "to-vpn-gw-c": IKE algorithm newest: AES_CBC_128-SHA1-MODP2048 #2: "to-vpn-gw-a":500 STATE_QUICK_I2 (sent QI2, IPsec SA established); EVENT_SA_REPLACE in 19862s; newest IPSEC; eroute owner; isakmp#1; idle; import:admin initiate #2: "to-vpn-gw-a" [email protected] [email protected] ref=0 refhim=4294901761 #16: "to-vpn-gw-a":500 STATE_MAIN_I4 (ISAKMP SA established); EVENT_SA_REPLACE in 211s; newest ISAKMP; lastdpd=-1s(seq in:0 out:0); idle; import:admin initiate #4: "to-vpn-gw-b":500 STATE_QUICK_I2 (sent QI2, IPsec SA established); EVENT_SA_REPLACE in 19643s; isakmp#3; idle; import:admin initiate #4: "to-vpn-gw-b" [email protected] [email protected] ref=0 refhim=4294901761 #15: "to-vpn-gw-b":500 STATE_MAIN_R3 (sent MR3, ISAKMP SA established); EVENT_SA_REPLACE in 393s; lastdpd=-1s(seq in:0 out:0); idle; import:not set #7: "to-vpn-gw-b":500 STATE_QUICK_R2 (IPsec SA established); EVENT_SA_REPLACE in 20348s; newest IPSEC; eroute owner; isakmp#6; idle; import:not set #7: "to-vpn-gw-b" [email protected] [email protected] ref=0 refhim=4294901761 #18: "to-vpn-gw-b":500 STATE_MAIN_R3 (sent MR3, ISAKMP SA established); EVENT_SA_REPLACE in 3022s; newest ISAKMP; lastdpd=-1s(seq in:0 out:0); idle; import:not set #10: "to-vpn-gw-c":500 STATE_QUICK_R2 (IPsec SA established); EVENT_SA_REPLACE in 21719s; isakmp#9; idle; import:not set #10: "to-vpn-gw-c" [email protected] [email protected] ref=0 refhim=4294901761 #17: "to-vpn-gw-c":500 STATE_MAIN_I4 (ISAKMP SA established); EVENT_SA_REPLACE in 1169s; newest ISAKMP; lastdpd=-1s(seq in:0 out:0); idle; import:admin initiate #11: "to-vpn-gw-c":500 STATE_QUICK_I2 (sent QI2, IPsec SA established); EVENT_SA_REPLACE in 21348s; newest IPSEC; eroute owner; isakmp#8; idle; import:admin initiate #11: "to-vpn-gw-c" [email protected] [email protected] ref=0 refhim=4294901761
type=transport din /etc/ipsec.conf pentru fiecare conexiune in parte inseamna ca o “conexiune” IPSec se va stabili doar intre IP-urile gateway-urilor.
Acum ca totul e OK la partea de criptare, se seteaza tunelele GRE intre gatewa-uri si hub:
ip tunnel add to-hub mode gre remote 10.15.0.1 local 10.16.0.2 ttl 255 ip addr add 192.168.168.2/30 peer 192.168.168.1/30 dev to-hub ip link set to-hub up
ip tunnel add to-hub mode gre remote 10.15.0.1 local 10.16.0.3 ttl 255 ip addr add 192.168.168.2/30 peer 192.168.168.1/30 dev to-hub ip link set to-hub up
ip tunnel add to-hub mode gre remote 10.15.0.1 local 10.16.0.4 ttl 255 ip addr add 192.168.168.2/30 peer 192.168.168.1/30 dev to-hub ip link set to-hub up
ip tunnel add to-gw-a mode gre remote 10.16.0.2 local 10.15.0.1 ttl 255 ip addr add 192.168.168.1/30 peer 192.168.168.2/30 dev to-gw-a ip link link set to-gw-a up ip tunnel add to-gw-b mode gre remote 10.16.0.3 local 10.15.0.1 ttl 255 ip addr add 192.168.168.5/30 peer 192.168.168.6/30 dev to-gw-b ip link link set to-gw-b up ip tunnel add to-gw-c mode gre remote 10.16.0.4 local 10.15.0.1 ttl 255 ip addr add 192.168.168.9/30 peer 192.168.168.10/30 dev to-gw-c ip link link set to-gw-c up
Tunelele GRE sunt necesare pentru a putea ruta peste orice avem nevoie fara a crea SA-uri suplimentare in IPSec pentru fiecare subnet sau adresa IP individuala si abstractizeaza partea de transport. Din punct de vedere IP un gateway are conexiune directa cu hub-ul si atat.
Ultima partea este configurarea Quagga pentru a avea partea de BGP functionala.
router bgp 4200000000 bgp router-id 192.168.168.9 neighbor 192.168.168.2 remote-as 4200000001 neighbor 192.168.168.2 next-hop-self neighbor 192.168.168.10 remote-as 4200000003 neighbor 192.168.168.10 next-hop-self
router bgp 4200000001 bgp router-id 192.168.168.2 network 172.16.1.0/24 neighbor 192.168.168.1 remote-as 4200000000
router bgp 4200000003 bgp router-id 192.168.168.10 network 172.16.3.0/24 neighbor 192.168.168.9 remote-as 4200000000
Configurarea de pe vpn-gw-b lipseste ca mi-am dat seama in timp ce scriam ca de fapt este OK de demonstrat si cu doar doua gateway-uri :)
BGP table version is 0, local router ID is 192.168.168.10 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale, R Removed Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *> 172.16.1.0/24 192.168.168.9 0 4200000000 4200000001 i *> 172.16.3.0/24 0.0.0.0 0 32768 i Total number of prefixes 2
BGP table version is 0, local router ID is 192.168.168.2 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale, R Removed Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *> 172.16.1.0/24 0.0.0.0 0 32768 i *> 172.16.3.0/24 192.168.168.1 0 4200000000 4200000003 i Total number of prefixes 2
BGP table version is 0, local router ID is 192.168.168.9 Status codes: s suppressed, d damped, h history, * valid, > best, i - internal, r RIB-failure, S Stale, R Removed Origin codes: i - IGP, e - EGP, ? - incomplete Network Next Hop Metric LocPrf Weight Path *> 172.16.1.0/24 192.168.168.2 0 0 4200000001 i *> 172.16.3.0/24 192.168.168.10 0 0 4200000003 i Total number of prefixes 2
Daca de pe vpn-gw-a dau un ping spre vpn-gw-c (ping 172.16.3.1 -I172.16.1.1) in tcpdump pe vpn-hub am sa vad urmatoarele:
20:03:55.112851 IP 10.16.0.2 > 10.15.0.1: ESP(spi=0xbe68e78f,seq=0x338), length 132 20:03:55.112906 IP 10.15.0.1 > 10.16.0.4: ESP(spi=0xac29a868,seq=0x30f), length 132 20:03:55.113404 IP 10.16.0.4 > 10.15.0.1: ESP(spi=0xfdb78f7d,seq=0x2b7), length 132 20:03:55.113434 IP 10.15.0.1 > 10.16.0.2: ESP(spi=0xc07aaa19,seq=0x370), length 132
Adica ajunge pachetul de la vpn-gw-a la vpn-hub, vpn-hub il trimite la vpn-gw-c, vpn-gw-c raspunde la vpn-hub si vpn-hub da mai departe la vpn-gw-a.
Adica merge cum trebuie toata jucaria :)
Ce mai am de studiat, ca inca mi-o iau in freza:
Alte chestii mai putin importante:
PS:
Dupa ce-o sa-mi treaca durerea de cap de o am, o sa sap mai cu talent in OpenSWAN sa vad cum il fac sa mearga cat mai sigur si cat mai simplu, eventual automatizat un pic.
Ieri, dupa ce m-am plimbat toata ziua cu blugii patati de cafea prin oras, am aflat de Nufar, un fel de fas-fas de scos pete. Io l-am luat de la Mega, arata cam ca alea de curatat geamuri, dai pe pete, lasi un pic sa-si faca magia si dupa aia pui la spalat.
Si m-am dus io sa-l iau, am aruncat bucuros toate hainele de pe mine, am dat cu crap din ala pe blugi si i-am pus la spalat. Si atunci m-a pocnit, n-am detergent.
Asa ca m-am apucat sa caut haine prin masina in care sa ma imbrac, alti blugi prin casa si din nou la magazin dupa detergent. Si iar acasa la bagat totul la spalat.
Anyway, long story short, acu am blugi ca noi, a mers Nufarul sa scoata petele. Urmatorea provocare: sa vad daca scoate si petele galbene de pe tricouri, poate scap de o tura de cumparaturi.