OpenVPN - Bridge (łączenie dwóch sieci w jedną, warstwa 2)

|

1. Do uruchomienia OpenVPNa jako bridge potrzebne będzie następujące oprogramowanie:

apt-get install openvpn
apt-get install bridge-utils
apt-get install iproute

Źródła:
http://openvpn.net/
http://bridge.sourceforge.net/
http://linux-net.osdl.org/index.php/Iproute2

2. Tworzymy współdzielony klucz szyfrujący połączenie
cd /etc/openvpn # wchodzimy do katalogu openvpna
openvpn --genkey --secret /etc/openvpn/static.key #tworzmy klucz static.key


3. Bridge na interfejsach (na obydwu routerach rA i rB). Najlepiej rozwiązanie przetestować na komputerach, do których mamy fizyczny dostęp od ręki, gdyż jeden błąd i stracimy połączenie ze zdalnym komputerem. Zakładamy, że podsieć lokalna znajduje się na interfejsie eth1 z adresem IP 192.168.1.1. Stworzymy interfejs br0 w którym połączymy kartę sieciową eth1 z urządzeniem tap połączenia OpenVPN (tap0). Otwórz plik /etc/network/interfaces i znajdź w nim konfigurację interfejsu eth1. Powinna wyglądać zbliżenie do tego:
auto eth1
iface eth1 inet static
address 192.168.1.1
netmask 255.255.255.0
broadcast 192.168.1.255
network 192.168.1.0


Zamień powyższe ustawienia eth1 na br0 zgodnie z poniższym kodem. Po każdym uruchomieniu systemu br0 będzie tworzone automatycznie i będzie zawierać interfejs eth1.
auto br0
iface br0 inet static
address 192.168.1.1
netmask 255.255.255.0
broadcast 192.168.1.255
network 192.168.1.0
bridge_ports eth1


Ustawimy jeszcze by interfejs eth1 podczas uruchamiana systemu nie posiadał adresu IP oraz włączymy tryb nasłuchiwania "promisc" (karta sieciowa odbiera wszystkie pakiety a nie tylko te, które są adresowane do jej adresu MAC). Należy dodać dodatkowy blok w /etc/network/interfaces:
auto eth1
iface eth1 inet manual
up ifconfig $IFACE 0.0.0.0 up
up ip link set $IFACE promisc on
down ip link set $IFACE promisc off
down ifconfig $IFACE down


Aby sprawdzić poprawność konfiguracji należy zrestartować router, a po restarcie urządzenia sieciowe powinny wyglądać mniej więcej tak:
test:~# ifconfig
br0 Protokoll:Ethernet Hardware Adresse 00:0C:29:77:B1:6A
inet Adresse:192.168.1.1 Bcast:172.16.64.255 Maske:255.255.255.0
inet6 Adresse: fe80::20c:29ff:fe77:b16a/64 Gültigkeitsbereich:Verbindung
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:155 errors:0 dropped:0 overruns:0 frame:0
TX packets:128 errors:0 dropped:0 overruns:0 carrier:0
Kollisionen:0 Sendewarteschlangenlänge:0
RX bytes:14239 (13.9 KiB) TX bytes:18581 (18.1 KiB)

eth1 Protokoll:Ethernet Hardware Adresse 00:0C:29:77:B1:6A
inet6 Adresse: fe80::20c:29ff:fe77:b16a/64 Gültigkeitsbereich:Verbindung
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
RX packets:155 errors:0 dropped:0 overruns:0 frame:0
TX packets:134 errors:0 dropped:0 overruns:0 carrier:0
Kollisionen:0 Sendewarteschlangenlänge:1000
RX bytes:16409 (16.0 KiB) TX bytes:19049 (18.6 KiB)
Interrupt:177 Basisadresse:0x1400

lo Protokoll:Lokale Schleife
inet Adresse:127.0.0.1 Maske:255.0.0.0
inet6 Adresse: ::1/128 Gültigkeitsbereich:Maschine
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
Kollisionen:0 Sendewarteschlangenlänge:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)


br0 ma teraz adres IP który miał wcześniej interfejs eth1, zaś interfejs eth1 jest bez adresu IP w trybie promisc. Obydwa interfejsy są podniesione (up). Pozostaje jeszcze sprawdzić, czy eth1 został dodany do interfejsu br0, a zrobisz to komendą brctl show br0, która powinna zwrócić zbliżone wartości:
test:~# brctl show br0
bridge name bridge id STP enabled interfaces
br0 8000.000c2977b16a no eth1



Jeśli wszystkie ustawienia są prawidłowe a pojawiły się problemy z działaniem sieci, sprawdź konfigurację iptables (ustawienia dla eth1 należy zmienić na br0).

4. Konfiguracja skryptów openvpn-a. Gdy OpenVPN podniesie połączenie, należy dodać utworzony interfejs tap0 do bridge. Stworzymy dwa skrypty. Jeden dodający tap0 do br0 po uzyskaniu połączenia przez VPNa, a drugi usuwający tap0 z br0 w momencie, gdy połączenie VPN zostanie wyłączone.
Skrypt pierwszy up.sh doda tap0 do br0. W katalogu /etc/openvpn utwórz skrypt up.sh:
#! /bin/sh

BR=$1
DEV=$2
MTU=$3
/sbin/ifconfig $DEV mtu $MTU promisc up
/usr/sbin/brctl addif $BR $DEV


Drugi skrypt down.sh usunie tap0 z br0. W katalogu /etc/openvpn utwórz skrypt down.sh:
#! /bin/sh

BR=$1
DEV=$2

/usr/sbin/brctl delif $BR $DEV
/sbin/ifconfig $DEV down


Nadaj prawo wykonywania dla skryptów:

chmod +x /etc/openvpn/up.sh
chmod +x /etc/openvpn/down.sh


5. Konfiguracja Openvpna
Oczywiście należy przekopiować ten sam klucz static.key na obydwa routery.
Konfiguracja routera rA:
dev tap0
remote rB.example.net
secret /etc/openvpn/static.key
daemon
up "/etc/openvpn/up.sh br0"
down "/etc/openvpn/down.sh br0"
lport 15000
rport 1194
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn/rB.example.net-status.log
log-append /var/log/openvpn/rB.example.net.log
ping-restart 60
ping 20

Konfiguracja routera rB:
dev tap0
remote rA.example.net
secret /etc/openvpn/static.key
daemon
up "/etc/openvpn/up.sh br0"
down "/etc/openvpn/down.sh br0"
lport 1194
rport 15000
user nobody
group nogroup
persist-key
persist-tun
status /var/log/openvpn/rA.example.net-status.log
log-append /var/log/openvpn/rA.example.net.log
ping-restart 60
ping 20

Różnica w konfiguracji polega na tym, że OpenVPN działa na warstwie drugiej, więc adres IP na interfejsach tap nie będzie wykorzystywany. Popraw pogrubione nazwy domenowe na własne bądź zamień je na adresy IP. Komendy up i down w konfiguracji uruchamiają stworzone wcześniej skrypty odpowiednio podczas uruchamiania i wyłączania VPNa.

6. Uruchamianie połączenia, na obydwu routerach rA i rB wykonaj:
/etc/init.d/openvpn start


Na początek sprawdź na obydwu routerach czy interfejs tap0 został dodany do br0. Na rA i rB wykonaj brctl show br0, na wyjściu powinieneś otrzymać:
test:~# brctl show br0
bridge name bridge id STP enabled interfaces
br0 8000.000c2977b16a no eth1
tap0


Jeśli na obydwu routerach bridge wygląda w ten sposób sieci zostały połączone. teraz dowolny host w nB z adresem sieci nA powinien osiągnąć dowolny host w nA.
Inna możliwością sprawdzenia działania jest umieszczenie komputera o IP 192.168.2.1 w sieci nB, komputera o IP 192.168.2.2 w sieci nA, a następnie ping z jednego komputera na drugi i vice versa.

7. Zagrożenia

a) Jeśli w obydwu sieciach działa serwer DHCP należy wyłączyć jeden z nich (zapytania DHCP przechodzą pomiędzy sieciami) lub na jednym z routerów filtrować zapytania DHCP, które przychodzą z drugiej sieci.

b) Pakiety możesz filtrować przy pomocy iptables na interfejsie br0.

c) Jeśli połączyłeś sieci ze sobą z tymi samymi zakresami adresów IP w obydwu sieciach, wówczas każdy pakiet do podsieci nB na początku trafi do routera rA, a później wróci z powrotem do podsieci (generuje to duży ruch na interfejsie zewnętrznym, a połączenia lokalne mogą działać z prędkością Twojego zewnętrznego połączenia).


Manual na debianie, wg źródłowego dokumentu, gdyż wersja na gentoo w mojej sieci wyszła z użycia, a pliki konfiguracyjne poszły w kosmos.

Źródło
http://ubuntuforums.org/printthread.php?t=752127

0 komentarze:

Prześlij komentarz