Tunel OpenVPN realizowany przez telefon Yealink SIP-T22P

Od niedawna telefony Yealink mają wsparcie klienta OpenVPN w fabrycznym firmware. Jest to wygodne rozwiązanie dla użytkowników łączących się do centrali SIP z Internetu. Zamiast otwierać porty na routerze dla połączeń sip i rtp lepiej będzie zabezpieczyć całą komunikację tunelem vpn. Standard OpenVPN jest dobrze udokumentowany i wspierany przez wiele urządzeń. Zawsze można sobie postawić maszynę która będzie terminowała połączenia od użytkowników zdalnych. Również na tej samej maszynie możemy skonfigurować firewalla tak by dodatkowo ograniczyć komunikację do wybranych serwerów.

Przygotowanie do uruchomienia serwera OpenVPN

Do szyfrowania komunikacji między klientem a serwerem będziemy używali certyfikatów. Wiąże się to z tym, że musimy mieć jakieś CA (Certificate Authority) w którym wygenerujemy certyfikaty dla serwera openvpn oraz klientów.

Jeśli nie dysponujemy CA najlepiej jest utworzyć swoje – korzystając z narzędzi dostępnych w pakiecie easy-rsa. Postępując zgodnie z tym co jest opisanie na stronie openvpn-howto od części Generate the master Certificate Authority (CA) certificate & key dochodzimy do punktu w którym mamy wygenerowane certyfikaty:

  1. CA
  2. serwera OpenVPN
  3. klienta OpenVPN (w naszym przypadku telefonu)
  4. plik z parametrami dh1024.pem

Podstawowy konfig serwera OpenVPN

proto tcpwybieramy czy będziemy korzystali z tcp czy udp do tunelu
port 12345numer portu na jakim serwer będzie nasłuchiwał połączeń
dev tuntyp urządzenia tunelującego w naszym przypadku w 3 warstwie
ca /etc/openvpn/easy-rsa/keys/ca.crt – ścieżka do certyfikatu CA
cert /etc/openvpn/easy-rsa/keys/server.crt – ścieżka do certyfikatu serwera OpenVPN
key /etc/openvpn/easy-rsa/keys/server.key – ścieżka do klucza serwera OpenVPN
dh /etc/openvpn/easy-rsa/keys/dh1024.pem – ścieżka do pliku z parametrami DH
tls-auth ta.key 0 – ścieżka do pliku ta.key. Korzystanie z mechanizmu tls-auth znacznie zabezpiecza nas przed atakami na serwer OpenVPN.
tls-server – będziemy korzystali z tls
server 10.9.8.0 255.255.255.0adres serwera OpenVPN jakim będzie się przedstawiał klientom
keepalive 10 120 – ustawienia keepalive
comp-lzo – będziemy korzystali z kompresji lzo. Wymaga modułu lzo
persist-key – nie odczytuj ponownie kluczy podczas wywołania SIGUSR1
persist-tun – nie wyłączaj interfejstu TUN podczas wywołania SIGUSR1
push „route 192.168.1.0 255.255.255.0”– wpychaj routing do takiej sieci po stronie klienta
status /var/log/openvpn-status.logzapisz plik ze statusem połączenia (Przydatne w debugingu)
client-to-client -klienci będą się widzieli wzajemnie.
<na szybko do wklejenia do pliku>
proto tcp
port 12345
dev tun
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/server.crt
key /etc/openvpn/easy-rsa/keys/server.key
dh /etc/openvpn/easy-rsa/keys/dh1024.pem
tls-auth ta.key 0
tls-server
server 10.9.8.0 255.255.255.0
keepalive 10 120
comp-lzo
persist-key
persist-tun
push „route 192.168.1.0 255.255.255.0”
status /var/log/openvpn-status.log
client-to-client

Podstawowy konfig klienta OpenVPN – telefonu Yealink

W celu skonfigurowania klienta konieczne będzie przygotowanie archiwum .tar które musi zawierać określoną strukturę plików. W tym celu najlepiej pod linuksem uruchamiany komendy:

mkdir telefon
cd telefon
mkdir keys
cd keys

następnie kopiujemy utworzone wcześniej pliki do lokalnego katalogu:

cp /etc/openvpn/easy-rsa/keys/ca.crt
cp /etc/openvpn/easy-rsa/keys/ta.key
cp /etc/openvpn/easy-rsa/keys/telefon.crt
cp /etc/openvpn/easy-rsa/keys/telefon.key
cd ..

Do pełni szczęścia potrzebujemy jeszcze pliku konfiguracyjnego klienta OpenVPN. Nie różni się on zbytnio od typowych ustawień każdego użytkownika OpenVPN. Tworzymy plik o nazwie vpn.cnf w którym umieszczamy dyrektywy konfiguracyjne

client
dev tun
dev-type tun
proto tcp
remote 172.16.0.1 12345
resolv-retry infinite
nobind
persist-key
persist-tun
ca /config/openvpn/keys/ca.crt
cert /config/openvpn/keys/telefon.crt
key /config/openvpn/keys/telefon.key
tls-auth /config/openvpn/keys/ta.key 1
ns-cert-type server
comp-lzo
verb 3

na końcu wykonujemy komendę tar -cvpf telefon.tar * – aby utworzyć archiwum telefon.tar które umieścimy w telefonie.

Wgrywanie konfiguracji tunelu OpenVPN do aparatu

  1. Logujemy się do panelu administracyjnego przeglądarką.
  2. Odnajdujemy sekcję ustawień Network/Advanced.
  3. Na samym dole odnajdujemy sekcję odpowiedzialną za OpenVPN. Włączamy funkcję na enable. (Uwaga wymagany restart).
  4. Po restarcie wgrywamy przygotowany wcześniej plik telefon.tar – potwierdzamy – confirm.

Nie wiem po jakim czasie telefon nawiąże próbę zestawienia tunelu. Nie chciałem na to czekać i wykonałem restart telefonu.

Po ponownym uruchomieniu pojawiła się miła ikonka na ekranie telefonu i parafrazując pewnego profesora UAM – Co należało dowieść.

Informacyjnie uruchomienie klienta OpenVPN w telefonie powoduje jego dłuższe uruchamianie. Normalnie dla T22p jest to 1 minuta i 5 sekund. Po uruchomieniu klienta OVPN czas ten wynosi 1 minuta i 25 sekund. Na końcu zostało skonfigurować konto pod adresem serwera po drugiej stronie tunelu. Adres serwera OpenVPN jest to pierwszy adres wolny w podsieci wskazanej przy dyrektywie server – czyli 10.9.8.1 Jeśli za serwer OVPN będzie służyła inna maszyna niż centralka SIP – pamiętajcie o wpisaniu statycznego routingu na serwerze SIP do serwera OpenVPN. Bez tego serwer SIP nie będzie wiedział gdzie kierować pakiety z powrotem do klientów OpenVPN.