OpenVPN - pseudo - Bridge (dwie różne sieci LAN, warstwa 3, protokół TCP/IP)

|

Połączymy przy pomocy OpenVPN dwie sieci, z różnymi adresami sieci lokalnych. Połączenie działa w warstwie 3-ciej po protokole TCP/IP, więc wszystkie usługi tego protokołu i warstwy będą pracować jak w jednej sieci.

Podsieć A (nA) 192.168.0.0/24 (zakres adresów LAN)
|
Router A (rA) 192.168.0.1, rA.example.net (zewnętrzny adres IP)
|
Internet
|
Router B (rB) 192.168.1.1, rB.example.net (zewnętrzny adres IP)
|
Podsieć B (nB) 192.168.1.0/24 (zakres adresów LAN)
Obydwa routery (rA, rB) muszą mieć włączone przekazywanie pakietów (ip forwarding).
echo "1" > /proc/sys/net/ip_forward
W kernel musi być wkompilowane przekazywanie pakietów (ip_forward) oraz interfejs (TUN/TAP)
Podsieć nA ma dostęp do internetu przez router rA, podsieć nB ma dostęp do internetu przez router rB.

1. Przede wszystkim należy zainstalować OpenVPN-a na obydwu routerach (repozytoria używanego systemu bądź ręcznie)
emerge openvpn # system gentoo
apt-get install openvpn #system ubuntu/debian
źródło: http://www.openvpn.net/
2. Tworzymy klucz współdzielony dla połączenia Pont-to-Point pomiędzy routerami rA-rB. Zamiast kilku certyfikatów z możliwością wykorzystania wśród wielu klientów utworzymy klucz statyczny dla obydwu routerów. Na początek router rA
cd /etc/openvpn # wchodzimy do katalogu openvpna
openvpn --genkey --secret /etc/openvpn/static.key #tworzmy klucz static.key
Teraz przystąpimy do konfiguracji openvpna.
3. Konfigurujemy router rA. Należy utworzyć nowy plik konfiguracyjny w katalogu openvpna /etc/openvpn. Utwórz plik i otwórz go w edytorze.
nano /etc/openvpn/rB.example.net.conf

W pliku wklej poniższy kod:
dev tun0 #tworzę urządzenie sieciowe tun0
remote rB.example.net #łączę się z hostem rB.example.net
ifconfig 10.0.0.1 10.0.1.1 #tun0 będzie miał adres 10.0.0.1, spodziewany adres drugiego końca tunelu: 10.0.1.1
secret /etc/openvpn/static.key #klucz statyczny znajduje się w /etc/openvpn/static.key
daemon #VPN będzie działał jako demon (przejdzie w tło po nawiązaniu połączenia)
lport 15000 #lokalnie VPN będzie przypisany do portu 15000
rport 1194 #i podłączony do portu 1194 zewnętrznego serwera
user nobody #VPN zostanie uruchomiony z prawami użytkownika nobody
group nogroup #VPN zostanie uruchomiony z prawami grupy nogroup
persist-key #VPN zachowa klucz w pamięci
persist-tun #VPN pozostawi podniesiony interfejs tun0
status /var/log/openvpn/rB.example.net-status.log #w tym pliku zostanie zapisany status połączenia
log-append /var/log/openvpn/rB.example.net.log #do tego pliku OpenVPN będzie logował informacje
ping-restart 60 #VPN uzna połączenie za rozłączone w przypadku, gdy nie otrzyma pinga w ciągu 60 sekund.
ping 20 #VPN będzie próbował pingować zdalnego hosta co 20 sekund
Pogrubiony fragment musi zostać zmieniony wedle Twojej konfiguracji sieciowej, możesz również użyć adresu IP zamiast nazwy domenowej. Reszta do testów może pozostać bez zmian.
Teraz należy utworzyć katalog, w którym będą przechowywane logi oraz nadać mu uprawnienia użytkownika nobody i grupy nogroup
mkdir /var/log/openvpn
chown nobody.nogroup /var/log/openvpn
4. Konfiguracja routera rB jest dokładnie taka sama jak routera rA, należy jednak dokonać 3 zmian w pliku.
a) zdalny host musi zostać zmieniony z rB.example.net na rA.example.net (według Twojej nazwy domenowej bądź adresów IP)
b) wpis ifconfig 10.0.0.1 10.0.1.1 musi zostać zamieniony na odwrotny: ifconfig 10.0.1.1 10.0.0.1
(lokalny adres routera rA jest zewnętrznym adresem routera rB i vice versa)
b) porty rport i lport muszą zostać zamienione z tego samego powodu co w punkcie b). Z:
lport 15000
rport 1194
na:
lport 1194
rport 15000
Otwórz plik konfiguracyjny na routerze rB:
nano /etc/openvpn/rA.example.net.conf

i wklej poniższą zawartość:
dev tun0
remote rA.example.net
ifconfig 10.0.1.1 10.0.0.1
secret /etc/openvpn/static.key
daemon
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
Pamiętaj by zamienić pogrubioną wartość na prawidłową nazwę domenową bądź adres IP routera rA. Należy utworzyć teraz katalog na logi:
mkdir /var/log/openvpn
chown nobody.nogroup /var/log/openvpn

Na koniec należy przekopiować statyczny klucz static.key z routera rA do routera rB, do katalogu /etc/openvpn.
Pamiętaj, by do przekopiowania pliku użyć bezpiecznego połączenia sftp/ssh, gdyż jest to jedyne zabezpieczenie tunelu. W przypadku gdy ktoś przechwyci ten plik Twoje obydwie sieci są na wyciągnięcie ręki.
5. Pozostała jeszcze modyfikacja firewalla na routerach rA i rB. Dopisz poniższe linijki do firewalli na odpowiednich routerach. Na routerze rA:
iptables -A INPUT -p udp --sport 1194 --dport 15000 -j ACCEPT #otwieramy dwa porty UDP zdefiniowane w configu VPNA
iptables -A OUTPUT -p udp --sport 15000 --dport 1194 -j ACCEPT #otwieramy dwa porty UDP zdefiniowane w configu VPNA
na routerze rB:
iptables -A INPUT -p udp --sport 15000 --dport 1194 -j ACCEPT
iptables -A OUTPUT -p udp --sport 1194 --dport 15000 -j ACCEPT
6. Jeśli posiadamy skrypt startowy uruchamiamy OpenVPNA na obydwu serwerach (na rA i rB)
/etc/init.d/openvpn start

W przeciwnym wypadku odpalamy VPNA "z palca", na routerze rB zmieniamy nazwę configa na:
rB.example.net.conf.
cd /etc/openvpn
openvpn --config rA.example.net.conf
Po prawidłowym połączeniu na routerze rA, w logu powinniśmy zobaczyć zbliżone informacje:
Thu Apr 10 11:27:35 2008 OpenVPN 2.0.9 i486-pc-linux-gnu [SSL] [LZO] [EPOLL] bui
lt on Sep 20 2007
Thu Apr 10 11:27:35 2008 TUN/TAP device tun0 opened
Thu Apr 10 11:27:35 2008 ifconfig tun0 10.0.0.1 pointopoint 10.0.1.1 mtu 1500
Thu Apr 10 11:27:35 2008 GID set to nogroup
Thu Apr 10 11:27:35 2008 UID set to nobody
Thu Apr 10 11:27:35 2008 UDPv4 link local (bound): [undef]:15000
Thu Apr 10 11:27:35 2008 UDPv4 link remote: x.x.x.x:1194
Thu Apr 10 11:27:45 2008 Peer Connection Initiated with x.x.x.x:1194
Thu Apr 10 11:27:46 2008 Initialization Sequence Completed
Używając ifconfig zobaczysz interfejs tun0, który powinien wyglądać mniej więcej tak:
someone@server:# ifconfig tun0
tun0 Protokoll:UNSPEC Hardware Adresse 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet Adresse:10.0.0.1 P-z-P:10.0.1.1 Maske:255.255.255.255
UP PUNKTZUPUNKT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:167 errors:0 dropped:0 overruns:0 frame:0
TX packets:175 errors:0 dropped:0 overruns:0 carrier:0
Kollisionen:0 Sendewarteschlangenlänge:100
RX bytes:14740 (14.3 KiB) TX bytes:10705 (10.4 KiB)
Teraz powinieneś móc spingować z routera rA router rB wykorzystując wewnętrzny adres rB 10.0.1.1 i odwrotnie. Jeśli ping działa pomiędzy routerami możemy dopisać do konfiguracji OpenVPNA linijki, dzięki którym możliwy będzie dostęp do sieci wewnętrznej za routerami.
7. Należy poinformować router rA, że sieć 192.168.1.0/24 jest osiągalna z poziomu interfejsu tun0 pod adresem 10.0.1.1.
Router rB musi posiadać informacje, że sieć 192.168.0.0/24 jest na interfejsie tun0 pod adresem 10.0.0.1. Należy dopisać do plików konfiguracyjnych VPNa następującą linijkę, na routerze rA w pliku rB.example.net dodaj:
route 192.168.1.0 255.255.255.0

na routerze rB w pliku rA.example.net.conf dodaj:
route 192.168.0.0 255.255.255.0

Następnie musisz zrestartować na obydwu routerach (rA i rB) Openvpna
/etc/init.d/openvpn restart

8. Zmodyfikujemy jeszcze zaporę pozwalając na przekazywanie pakietów pomiędzy dwoma podsieciami a tunelem VPN. Na obydwu routerach należy dopisać poniższe linijki do firewalla zakładając że pod interfejsem eth0 jest podsieć lokalna.
iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT

Teraz powinieneś z dowolnego hosta w podsieci nA być wstanie spingować hosta w podsieci nB i odwrotnie. Bridge działa dając bezpośredni dostęp pomiędzy komputerami w obydwu sieciach.

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

0 komentarze:

Prześlij komentarz