Połączenie OpenVPN site-to-site między EdgeRouterem a Debianem

Tak na szybko aby nie uleciało 🙂

  1. Logujemy się na EdgeRouter i z poziomu usera (nie configure) generujemy klucz wspólny:
    ubnt@router:~$ generate vpn openvpn-key /config/auth/openvpn-s2s-secret
    Generating OpenVPN key to /config/auth/openvpn-s2s-secret
    Your new local OpenVPN key has been generated
    ubnt@router:~$
  2. Konfigurujemy VPNa od strony EdgeRoutera (w naszym przypadku EdgeRouter ma zewnętrzne stałe IP a Debian będzie się do niego „dopinał”):
    ubnt@router:~$ configure
    ubnt@router# set interfaces openvpn vtun0 local-address 10.1.254.1
    ubnt@router# set interfaces openvpn vtun0 local-port 1195
    ubnt@router# set interfaces openvpn vtun0 mode site-to-site
    ubnt@router# set interfaces openvpn vtun0 openvpn-option --comp-lzo
    ubnt@router# set interfaces openvpn vtun0 openvpn-option --float
    ubnt@router# set interfaces openvpn vtun0 openvpn-option '--ping 10'
    ubnt@router# set interfaces openvpn vtun0 openvpn-option '--ping-restart 20'
    ubnt@router# set interfaces openvpn vtun0 openvpn-option --ping-timer-rem
    ubnt@router# set interfaces openvpn vtun0 openvpn-option --persist-tun
    ubnt@router# set interfaces openvpn vtun0 openvpn-option --persist-key
    ubnt@router# set interfaces openvpn vtun0 openvpn-option '--user nobody'
    ubnt@router# set interfaces openvpn vtun0 openvpn-option '--group nogroup'
    ubnt@router# set interfaces openvpn vtun0 remote-address 10.1.254.2
    ubnt@router# set interfaces openvpn vtun0 shared-secret-key-file /config/auth/openvpn-s2s-secret
    ubnt@router# commit
    ubnt@router# save

    Gdzie:
    10.1.254.1 – IP Edge Routera na interfejsie VPN
    10.1.254.2 – IP Debiana na interfejsie VPN
    1195 – port VPNa
    /config/auth/openvpn-s2s-secret – nazwa wygenerowanego wcześniej pliku z kluczem

  3. Na debianie instalujemy OpenVPNa
  4. Przenosimy plik /config/auth/openvpn-s2s-secret z EdgeRoutera na debiana jako /etc/openvpn/secret (jest to zwykły plik tekstowy można na routerze użyć sudo cat /config/auth/openvpn-s2s-secret i po prostu wkleić go na Debianie
  5. Tworzymy konfig VPNa na debianie w pliki /etc/openvpn/s2s.conf (IP.IP.IP.IP to IP EdgeRoutera):
    dev vtun0
    dev-type tun
    ping 10
    ping-restart 60
    ifconfig 10.1.254.2 10.1.254.1
    lport 1195
    rport 1195
    proto udp
    remote IP.IP.IP.IP
    secret /etc/openvpn/secret
    comp-lzo
    ping-timer-rem
    persist-tun
    persist-key
    user nobody
    group nogroup
    float
    script-security 2
  6. Włączamy autostart połączenia razem z systemem:
    systemctl enable [email protected]
  7. Włączamy połączenie VPN:
    systemctl start [email protected]
  8. W tym momencie powinniśmy mieć już możliwość pingowania po adresach VPN (10.1.254.1 <-> 10.1.254.2)
  9. Jeżeli dodatkowo chcemy połączyć se sobą podłączone sieci, to musimy dodać trasy routingu. Na EdgeRouterze wykonujemy polecenie:
    ubnt@router# set protocols static interface-route 10.1.2.0/24 next-hop-interface vtun0
    

    (gdzie 10.1.2.0/24 to sieć od strony debiana)

  10. Na debianie sprawa jest utrudniona. Tworzymy skrypt /etc/openvpn/s2s-up.sh o zawartości:
    #!/bin/sh
    /sbin/ip route add 10.1.1.0/24 dev $dev
    

    (gdzie 10.1.1.0/24 to sieć po stronie  EdgeRoutera).
    Nadajemy mu prawa do wykonania:

    chmod +x /etc/openvpn/s2s-up.sh

    i do pliku konfiguracyjnego /etc/openvpn/s2s.conf dopisujemy:

    up /etc/openvpn/s2s-up.sh
  11. Pozostaje tylko zresetować VPNa (na debianie):
    systemctl restart [email protected]

    i wszystko powinno zacząć działać.

  12. Dla pewności możemy sprawdzić tablice routingu.
    Na Debianie:

    wyprz ~ # ip route
    default via 10.1.2.1 dev eth0 onlink 
    10.1.1.0/24 dev vtun0 scope link 
    10.1.2.0/24 dev eth0 proto kernel scope link src 10.1.2.2 
    10.1.254.1 dev vtun0 proto kernel scope link src 10.1.254.2 
    169.254.0.0/16 dev eth0 scope link metric 1000

    Na EdgeRouterze:

    ubnt@router:~$ show ip route
    Codes: K - kernel, C - connected, S - static, R - RIP, B - BGP
           O - OSPF, IA - OSPF inter area
           N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
           E1 - OSPF external type 1, E2 - OSPF external type 2
           > - selected route, * - FIB route, p - stale info
    IP Route Table for VRF "default"
    S    *> 0.0.0.0/0 [210/0] via 89.71.140.1, eth4
    C    *> 10.1.1.0/24 is directly connected, eth0
    S    *> 10.1.2.0/24 [1/0] is directly connected, vtun0
    C    *> 10.1.254.1/32 is directly connected, vtun0
    C    *> 10.1.254.2/32 is directly connected, vtun0
    C    *> 89.71.140.0/22 is directly connected, eth4
    C    *> 127.0.0.0/8 is directly connected, lo