OpenVPN – propojení kanceláře a počítačů v terénu

Jako spousta firem využíváme služeb datacentra ve kterém máme servery a v kanceláři se snažíme mít minimum běžícího hardware. Prakticky jediné co si v kanceláři držíme je server na kterém běží virtuální stroje pro vývojáře. Kancelář je připojena do Internetu obyčejnou ADSL linkou s dynamicky přidělovanou IP adresou přes malý router, který natuje síť a slouží jako lokální DHCP.

Vývojáři občas potřebují přístup na své vývojové prostředí i z domova nebo od zákazníka, proto jsme zavedli vše propojili VPNkou.

VPN

Server v datacentru slouží jako VPN server ke kterému se připojuje jak kancelář tak i uživatelé ze svých počítačů pokud jsou mimo kancelář.

VPN používáme “routovanou” – má vlastní IP rozsah a síť kanceláře ve které je virtualizační server a jednotlivé virtuály na něm se routuje do VPNky.

VPN síť: 192.168.100.0/24

Kancelář: 172.31.100.0/24

Protože používáme v kanceláři “tupý” router, který neumožňuje provozovat OpenVPN přímo na sobě, navazuje VPN spojení náš virtualizační server.

Servery jsou linuxové – všude je distribuce CentOS. Klienti jsou směska různých linxových distribucí, MacOS X a Windows.

Všude používáme OpenVPN verze 2.X (nejčastěji je to 2.2)

VPN server

Kompletní konfigurace VPN serveru je v souboru /etc/openvpn/vpn.conf:

user nobody
group nobody
local neon
port 1194
proto udp
dev tun
server 192.168.100.0 255.255.255.0
ca ca.pem
cert vpnserver.pem
key vpnserver.key
dh dh2048.pem
tls-auth ta-vpnserver.key 0
client-to-client
comp-lzo
persist-tun
persist-key
ifconfig-pool-persist ipp-vpn.txt
client-config-dir ccd-vpn
verb 3
keepalive 10 120
push "redirect-gateway def1"
push "dhcp-option DNS 8.8.8.8"
route 172.31.100.0 255.255.255.0
push "route 172.31.100.0 255.255.255.0"
status-version 2
status /etc/openvpn/logs/vpn-status.log
crl-verify /etc/openvpn/crl.pem

Soubory ta-vpnserver.key, dh2048.pem, ca.pem, vpnserver.pem, vpnserver.key a crl.pem jsou vytvořené pomocí sady skriptů easy-rsa dodávané s OpenVPN.

Kancelář

Pro “kancelářský” server je nutné vytvořit na VPN serveru záznam s individuální konfigurací routování. Do souboru /etc/openvpn/ccd-vpn/kancelar (název souboru odpovídá CN v certifikátu pro kancelářský server) zapište:

iroute 172.31.100.0 255.255.255.0

Naše kanclář používá síť 172.31.100.0/24. V konfiguraci VPN serveru (vpn.conf) pomocí direktiv route a push umožníme tuto síť routovat přes VPN. Konfigurace pro kancelářský server v souboru ccd-vpn/kancelar s iroute záznamem určuje, že se přes tohoto klienta bude daná síť routovat.

Konfigurace OpenVPN na kancelářském serveru je v souboru /etc/openvpn/vpn.conf:

cert kancelar.crt
key kancelar.key
client
dev tun
proto udp
remote vpnserver.datacentrum.tld 1194
float
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
tls-auth ta-vpnserver.key 1
comp-lzo
verb 3
mute-replay-warnings

Certifikáty jsou zase generované easy-rsa skripty.

Po navázání VPN z kanceláře by měla na kancelářském serveru vypadat routovací tabulka nějak takhle:

[root@kancelar ~]# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
11.11.11.11 172.31.100.1 255.255.255.255 UGH 0 0 0 eth0
192.168.200.33 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
172.31.254.0    0.0.0.0         255.255.255.0   U         0 0          0 eth0
192.168.100.0 192.168.100.33 255.255.255.0 UG 0 0 0 tun0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
0.0.0.0 192.168.100.33 128.0.0.0 UG 0 0 0 tun0
128.0.0.0 192.168.100.33 128.0.0.0 UG 0 0 0 tun0
0.0.0.0         172.31.100.1    0.0.0.0         UG        0 0          0 eth0

Na straně VPN serveru v datacentru vypadá routovací tabulka následujícím způsobem:

192.168.201.2   0.0.0.0         255.255.255.255 UH        0 0          0 tun0
11.11.11.0      0.0.0.0         255.255.255.0   U         0 0          0 eth0
172.31.100.0 192.168.100.2 255.255.255.0 UG 0 0 0 tun0
192.168.100.0 192.168.100.2 255.255.255.0 UG 0 0 0 tun0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
0.0.0.0         11.11.11.1      0.0.0.0         UG        0 0          0 eth0

Zvýrazněná řádky ukazují routy týkající se VPN.

Na kancelářském serveru je samozřejmě nutné zapnout forward packetů – v /etc/sysctl.conf nastavte:

net.ipv4.ip_forward = 1

a poté spusťte “sysctl -p”.

Uživatelé

Konfigurace VPN na straně uživatelů je prakticky stejná jako u kancelářského serveru:

client
dev tun
proto udp
remote vpnserver.datacentrum.tld 1194
float
resolv-retry infinite
nobind
user nobody
group nogroup
persist-key
persist-tun
ca ca.crt
cert klient1.crt
key klient1.key
tls-auth ta-vpnserver.key 1
comp-lzo
verb 3
mute-replay-warnings

Routovací tabulka potom vypadá následujícím způsobem (nelekněte se jiného formátování proti Linuxu, je to výpis z MacOS X):

dw1911:Configurations tsunami$ netstat -rn
Routing tables

Internet:
Destination        Gateway            Flags        Refs      Use   Netif Expire
0/1                192.168.100.5      UGSc            1        0    tun0
default            172.31.100.1       UGSc            7        0     en1
default            172.20.10.1        UGScI           0        0     en3
11.11.11.11/32     172.31.100.1       UGSc            1        0     en1
127                127.0.0.1          UCS             0        0     lo0
127.0.0.1          127.0.0.1          UH              5   244943     lo0
128.0/1            192.168.100.5      UGSc            0        0    tun0
169.254            link#5             UCS             0        0     en1
172.20.10/28       link#10            UCS             0        0     en3
172.20.10.3        127.0.0.1          UHS             1        0     lo0
172.31.253/24      link#5             UCS             1        0     en1
172.31.100.1       54:e6:fc:b1:21:16  UHLWIi          2      266     en1   1188
172.31.100.103     127.0.0.1          UHS             0        0     lo0
172.31.100/24      192.168.100.5      UGSc            0        0    tun0
192.168.100        192.168.100.5      UGSc            0        0    tun0
192.168.100.5      192.168.100.6      UH              5        0    tun0

 

Like this:

Další témata