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)Obydwa routery (rA, rB) muszą mieć włączone przekazywanie pakietów (ip forwarding).
|
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)
echo "1" > /proc/sys/net/ip_forwardW 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 gentoo2. 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
apt-get install openvpn #system ubuntu/debian
źródło: http://www.openvpn.net/
cd /etc/openvpn # wchodzimy do katalogu openvpnaTeraz przystąpimy do konfiguracji openvpna.
openvpn --genkey --secret /etc/openvpn/static.key #tworzmy klucz static.key
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 tun0Pogrubiony 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.
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
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/openvpn4. Konfiguracja routera rB jest dokładnie taka sama jak routera rA, należy jednak dokonać 3 zmian w pliku.
chown nobody.nogroup /var/log/openvpn
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 tun0Pamiętaj by zamienić pogrubioną wartość na prawidłową nazwę domenową bądź adres IP routera rA. Należy utworzyć teraz katalog na logi:
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
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 VPNAna routerze rB:
iptables -A OUTPUT -p udp --sport 15000 --dport 1194 -j ACCEPT #otwieramy dwa porty UDP zdefiniowane w configu VPNA
iptables -A INPUT -p udp --sport 15000 --dport 1194 -j ACCEPT6. Jeśli posiadamy skrypt startowy uruchamiamy OpenVPNA na obydwu serwerach (na rA i rB)
iptables -A OUTPUT -p udp --sport 1194 --dport 15000 -j ACCEPT
/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/openvpnPo prawidłowym połączeniu na routerze rA, w logu powinniśmy zobaczyć zbliżone informacje:
openvpn --config rA.example.net.conf
Thu Apr 10 11:27:35 2008 OpenVPN 2.0.9 i486-pc-linux-gnu [SSL] [LZO] [EPOLL] buiTeraz 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.
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)
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