Założenia:
typowa konfiguracja OpenWRT Backfire lub AA
dwa routery
„Router-A” – pełnić będzie rolę serwera OpenVPN,
LAN adres routera IP 192.168.1.1, DHCP 192.168.1.101-150
WAN adres routera IP 123.123.123.123 (poglądowy adres publiczny)
port serwera OpenVPN 1194
pula adresów dla klientów OpenVPN 192.168.1.201-210
„Router-B” – pełnić będzie rolę klienta OpenVPN,
Jedna pula adresów dla obydwóch LAN-ów 192.168.1.0/24
Komunikacja między serwerem a klientem VPN na poziomie warstwy drugiej (broadcast-y biegają w całym LAN-ie), połączenie typu most/bridge.
Wszystko opisane poniżej wykonujemy z poziomu konsoli
Konfiguracja Router-A:
W plik /etc/config/network zmieniamy adres IP routera ipaddr i dodajemy interfejs tap0.
było:
config interface 'lan'
option 'eth0.1'
option type 'bridge'
option proto 'static'
option ipaddr '192.168.1.1'
option netmask '255.255.255.0'
powinno być:
config interface 'lan'
list ifname 'eth0.1'
list ifname 'tap0'
option type 'bridge'
option proto 'static'
option ipaddr '192.168.1.1'
option netmask '255.255.255.0'
W pliku /etc/config/dhcp dodajemy wykluczenie interfejsu notinterface i zmieniamy zakres przydzielanych adresów w sekcji dhcp lan.
było:
config 'dnsmasq'
option 'domainneeded' '1'
option 'boguspriv' '1'
option 'filterwin2k' '0'
option 'localise_queries' '1'
option 'rebind_protection' '1'
option 'rebind_localhost' '1'
option 'local' '/lan/'
option 'domain' 'lan'
option 'expandhosts' '1'
option 'nonegcache' '0'
option 'authoritative' '1'
option 'readethers' '1'
option 'leasefile' '/tmp/dhcp.leases'
option 'resolvfile' '/tmp/resolv.conf.auto'
config 'dhcp' 'lan'
option 'interface' 'lan'
option 'start' '100'
option 'limit' '100'
powinno być:
config 'dnsmasq'
option 'domainneeded' '1'
option 'boguspriv' '1'
option 'filterwin2k' '0'
option 'localise_queries' '1'
option 'rebind_protection' '1'
option 'rebind_localhost' '1'
option 'local' '/lan/'
option 'domain' 'lan'
option 'expandhosts' '1'
option 'nonegcache' '0'
option 'authoritative' '1'
option 'readethers' '1'
option 'leasefile' '/tmp/dhcp.leases'
option 'resolvfile' '/tmp/resolv.conf.auto'
option 'notinterface' 'tap0'
config 'dhcp' 'lan'
option 'interface' 'lan'
option 'start' '101'
option 'limit' '50'
W pliku /etc/config/firewall dodajemy regułę:
config rule
option '_name' 'Allow-OpenVPN'
option 'target' 'ACCEPT'
option 'dest_port' '1194'
option 'src' 'wan'
option 'proto' 'tcp'
option 'family' 'ipv4'
oraz tymczasowo przekierowanie i regułę:
config 'redirect'
option '_name' 'Allow-SSH TMP'
option 'src' 'wan'
option 'proto' 'tcp'
option 'dest_ip' '192.168.1.1'
option 'dest_port' '22'
config 'rule'
option '_name' 'Allow-SSH TMP'
option 'src' 'wan'
option 'target' 'ACCEPT'
option 'proto' 'tcp'
option 'dest_port' '22'
Uwaga, te dwie sekcje powyżej należy usunąć po zakończeniu wszystkich działań!
Do pliku /etc/firewall.user dodajemy następujące polecenia:
ebtables -F
ebtables -I FORWARD -i tap0 -p IPv4 --ip-protocol udp --ip-destination-port 67:68 -j DROP
ebtables -I FORWARD -o tap0 -p IPv4 --ip-protocol udp --ip-destination-port 67:68 -j DROP
ebtables -I INPUT -i tap0 -p IPv4 --ip-protocol udp --ip-destination-port 67:68 -j DROP
ebtables -I OUTPUT -o tap0 -p IPv4 --ip-protocol udp --ip-destination-port 67:68 -j DROP
Instalujemy oprogramowanie, wydając komendy:
opkg update
opkg install openvpn openvpn-easy-rsa kmod-ebtables-ipv4 ebtables ntpclient
W pliku /etc/easy-rsa/vars modyfikujemy ustawienia kluczy, powinno/może być:
export KEY_COUNTRY="PL"
export KEY_PROVINCE="MAZ"
export KEY_CITY="Warszawa"
export KEY_ORG="SiecDomowa"
export KEY_EMAIL="mojadres@polska.com.pl"
Weryfikujemy ustawienia czasu systemowego routera, wydając komendę:
Wykonujemy następujące polecenia:
clean-all
build-ca
build-dh
build-key-server Router-A
build-key Router-B
cp /etc/easy-rsa/keys/ca.crt /etc/openvpn/
cp /etc/easy-rsa/keys/dh1024.pem /etc/openvpn/
cp /etc/easy-rsa/keys/Router-A.crt /etc/openvpn/
cp /etc/easy-rsa/keys/Router-A.key /etc/openvpn/
W pliku /etc/config/openvpn dodajemy lub modyfikujemy następujące elementy:
package 'openvpn'
config 'openvpn' 'SiecDomowa'
option 'enabled' '1'
option 'mode' 'server'
option 'proto' 'tcp-server'
option 'dev_type' 'tap'
option 'dev' 'tap0'
option 'port' '1194'
option 'tun_mtu' '1500'
option 'comp_lzo' '1'
option 'server_bridge' '192.168.1.1 255.255.255.0 192.168.1.201 192.168.1.210'
option 'client_to_client' '1'
option 'keepalive' '60 120'
option 'persist_key' '1'
option 'persist_tun' '1'
option 'ca' '/etc/openvpn/ca.crt'
option 'cert' '/etc/openvpn/Router-A.crt'
option 'key' '/etc/openvpn/Router-A.key'
option 'dh' '/etc/openvpn/dh1024.pem'
Aby włączyć OpenVPN i ponownie uruchomić router należy wydać polecenie:
/etc/init.d/openvpn enable
reboot
Konfiguracja Router-B:
W plik /etc/config/network zmieniamy adres IP routera ipaddr i dodajemy interfejs tap0.
było:
config interface 'lan'
option 'eth0.1'
option type 'bridge'
option proto 'static'
option ipaddr '192.168.1.1'
option netmask '255.255.255.0'
powinno być:
config interface 'lan'
list ifname 'eth0.1'
list ifname 'tap0'
option type 'bridge'
option proto 'static'
option ipaddr '192.168.1.2'
option netmask '255.255.255.0'
W pliku /etc/config/dhcp dodajemy wykluczenie interfejsu notinterface i zmieniamy zakres przydzielanych adresów w sekcji dhcp lan.
było:
config 'dnsmasq'
option 'domainneeded' '1'
option 'boguspriv' '1'
option 'filterwin2k' '0'
option 'localise_queries' '1'
option 'rebind_protection' '1'
option 'rebind_localhost' '1'
option 'local' '/lan/'
option 'domain' 'lan'
option 'expandhosts' '1'
option 'nonegcache' '0'
option 'authoritative' '1'
option 'readethers' '1'
option 'leasefile' '/tmp/dhcp.leases'
option 'resolvfile' '/tmp/resolv.conf.auto'
config 'dhcp' 'lan'
option 'interface' 'lan'
option 'start' '100'
option 'limit' '100'
powinno być:
config 'dnsmasq'
option 'domainneeded' '1'
option 'boguspriv' '1'
option 'filterwin2k' '0'
option 'localise_queries' '1'
option 'rebind_protection' '1'
option 'rebind_localhost' '1'
option 'local' '/lan/'
option 'domain' 'lan'
option 'expandhosts' '1'
option 'nonegcache' '0'
option 'authoritative' '1'
option 'readethers' '1'
option 'leasefile' '/tmp/dhcp.leases'
option 'resolvfile' '/tmp/resolv.conf.auto'
option 'notinterface' 'tap0'
config 'dhcp' 'lan'
option 'interface' 'lan'
option 'start' '151'
option 'limit' '50'
Do pliku /etc/firewall.user dodajemy następujące polecenia:
ebtables -F
ebtables -I FORWARD -i tap0 -p IPv4 --ip-protocol udp --ip-destination-port 67:68 -j DROP
ebtables -I FORWARD -o tap0 -p IPv4 --ip-protocol udp --ip-destination-port 67:68 -j DROP
ebtables -I INPUT -i tap0 -p IPv4 --ip-protocol udp --ip-destination-port 67:68 -j DROP
ebtables -I OUTPUT -o tap0 -p IPv4 --ip-protocol udp --ip-destination-port 67:68 -j DROP
Instalujemy oprogramowanie, wydając komendy:
opkg update
opkg install openvpn kmod-ebtables-ipv4 ebtables ntpclient
W pliku /etc/config/openvpn dodajemy lub modyfikujemy następujące elementy:
package 'openvpn'
config 'openvpn' 'SiecDomowa'
option 'enabled' '1'
option 'client' '1'
option 'daemon' '1'
option 'proto' 'tcp-client'
option 'dev_type' 'tap'
option 'dev' 'tap0'
option 'tun_mtu' '1500'
option 'comp_lzo' '1'
option 'remote' '123.123.123.123 1194'
option 'resolv_retry' 'infinite'
option 'nobind' '1'
option 'persist_key' '1'
option 'persist_tun' '1'
option 'ns_cert_type' 'server'
option 'ca' '/etc/openvpn/ca.crt'
option 'cert' '/etc/openvpn/Router-B.crt'
option 'key' '/etc/openvpn/Router-B.key'
Z Routera-A z katalogu /etc/easy-rsa/keys/ kopiujemy pliki ca.crt, Router-B.crt, Router-B.key do katalogu /etc/openvpn/ na Routerze-B wydając polecenie:
scp root@123.123.123.123:"/etc/easy-rsa/keys/ca.crt /etc/easy-rsa/keys/Router-B.crt /etc/easy-rsa/keys/Router-B.key" /etc/openvpn/
Weryfikujemy ustawienia czasu systemowego routera, wydając komendę:
Na koniec, na tym routerze także należy włączyć OpenVPN i także go zrestartować. W tym celu należy wydać polecenia:
/etc/init.d/openvpn enable
reboot
Na Routrze-A w pliku /etc/config/firewall należy usunąć tymczasowe sekcje role i redirect o nazwach Allow-SSH TMP i wykonać komendę /etc/init.d/firewall restart
Warto z Routera-A wykonać kopię plików z katalogu /etc/easy-rsa/ do bezpiecznego miejsca a następnie katalog ten usunąć.
Można z Routera-A odinstalować pakiet easy-rsa wydając komendę opkg remove openvpn-easy-rsa
Powyżej znajdują się tylko fragmenty plików konfiguracyjnych. W rzeczywistości pliki te mogą zawierać także inne parametry.
Należy zwrócić uwagę na poprawne ustawienie czasu w trakcie generowania kluczy.
Ważne, aby na obydwóch routerach poprawnie działała synchronizacja czasu.
install.sh - Aktualizacja systemu,
sysinfo.sh - Info.o systemie,
openvpn-auth.sh - Login dla OpenVPN
Tu moje skrypty na GitHub