- Host OS: Debian 12.0.0
- Guest OS: CentOS 7.8.2003
- VirtualBox: 6.1.40
- Vagrant: 2.3.2
- Ansible: 2.13.4
- между двумя виртуалками поднять vpn в режимах
-
tun;
-
tap;
Описать в чём разница, замерить скорость между виртуальными машинами в туннелях.
- поднять RAS на базе OpenVPN с клиентскими сертификатами, подключиться с локальной машины на виртуалку.
Развёрнуты две машины. Выполнена установка требуемых пакетов:
yum install -y epel-release
yum install -y openvpn iperf3 easy-rsa policycoreutils-python
Сгенерирован статический ключ, с которым в дальнейшем будет выполняться подключение:
openvpn --genkey --secret /etc/openvpn/static.key
Конфигурация сервера:
dev tap
ifconfig 10.10.10.1 255.255.255.0
topology subnet
secret /etc/openvpn/static.key
comp-lzo
status /var/log/openvpn-status.log
log /var/log/openvpn.log
verb 3
Конфигурация клиента:
dev tap
remote 192.168.10.10
ifconfig 10.10.10.2 255.255.255.0
topology subnet
route 192.168.10.0 255.255.255.0
secret /etc/openvpn/static.key
comp-lzo
status /var/log/openvpn-status.log
log /var/log/openvpn.log
verb 3
Замер пропускной способности туннеля в режиме TAP:
[root@client vagrant]# iperf3 -c 10.10.10.1 -t 40 -i 5
Connecting to host 10.10.10.1, port 5201
[ 4] local 10.10.10.2 port 33856 connected to 10.10.10.1 port 5201
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-5.00 sec 9.25 MBytes 15.5 Mbits/sec 20 226 KBytes
[ 4] 5.00-10.00 sec 9.20 MBytes 15.4 Mbits/sec 86 119 KBytes
[ 4] 10.00-15.00 sec 8.46 MBytes 14.2 Mbits/sec 5 132 KBytes
[ 4] 15.00-20.00 sec 8.64 MBytes 14.5 Mbits/sec 5 138 KBytes
[ 4] 20.00-25.00 sec 8.40 MBytes 14.1 Mbits/sec 11 107 KBytes
[ 4] 25.00-30.00 sec 8.70 MBytes 14.6 Mbits/sec 0 152 KBytes
[ 4] 30.00-35.01 sec 8.46 MBytes 14.2 Mbits/sec 22 116 KBytes
[ 4] 35.01-40.00 sec 7.84 MBytes 13.2 Mbits/sec 8 116 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-40.00 sec 68.9 MBytes 14.5 Mbits/sec 157 sender
[ 4] 0.00-40.00 sec 68.3 MBytes 14.3 Mbits/sec receiver
iperf Done.
Замер пропускной способности туннеля в режиме TUN:
[root@client vagrant]# iperf3 -c 10.10.10.1 -t 40 -i 5
Connecting to host 10.10.10.1, port 5201
[ 4] local 10.10.10.2 port 33860 connected to 10.10.10.1 port 5201
[ ID] Interval Transfer Bandwidth Retr Cwnd
[ 4] 0.00-5.00 sec 12.1 MBytes 20.3 Mbits/sec 49 145 KBytes
[ 4] 5.00-10.01 sec 10.8 MBytes 18.2 Mbits/sec 0 192 KBytes
[ 4] 10.01-15.00 sec 10.3 MBytes 17.4 Mbits/sec 7 196 KBytes
[ 4] 15.00-20.00 sec 10.3 MBytes 17.3 Mbits/sec 56 111 KBytes
[ 4] 20.00-25.01 sec 10.5 MBytes 17.6 Mbits/sec 4 139 KBytes
[ 4] 25.01-30.01 sec 9.85 MBytes 16.5 Mbits/sec 0 182 KBytes
[ 4] 30.01-35.01 sec 11.2 MBytes 18.9 Mbits/sec 38 124 KBytes
[ 4] 35.01-40.00 sec 9.29 MBytes 15.6 Mbits/sec 4 144 KBytes
- - - - - - - - - - - - - - - - - - - - - - - - -
[ ID] Interval Transfer Bandwidth Retr
[ 4] 0.00-40.00 sec 84.5 MBytes 17.7 Mbits/sec 158 sender
[ 4] 0.00-40.00 sec 83.9 MBytes 17.6 Mbits/sec receiver
iperf Done.
- TAP
- виртуальный интерфейс, работает на L2
- по сути представляет собой бридж между роутерами
- подходит для проброса vlan`ов
- позволяет использовать link-state протоколы динамической маршрутизации
- TUN
- виртуальный интерфейс, работает на L3
- универсален с точки зрения типа и устройства подключения
- не позволяет использовать link-state протоколы динамической маршрутизации
Инициализация PKI
cd /etc/openvpn/
/usr/share/easy-rsa/3/easyrsa init-pki
echo 'rasvpn' | /usr/share/easy-rsa/3/easyrsa build-ca nopass
echo 'rasvpn' | /usr/share/easy-rsa/3/easyrsa gen-req server nopass
echo 'yes' | /usr/share/easy-rsa/3/easyrsa sign-req server server
/usr/share/easy-rsa/3/easyrsa gen-dh
openvpn --genkey --secret ta.key
echo 'client' | /usr/share/easy-rsa/3/easyrsa gen-req client nopass
echo 'yes' | /usr/share/easy-rsa/3/easyrsa sign-req client client
echo 'iroute 192.168.33.0 255.255.255.0' > /etc/openvpn/client/client
Конфигурация сервера RAS:
port 1207
proto udp
dev tun
ca /etc/openvpn/pki/ca.crt
cert /etc/openvpn/pki/issued/server.crt
key /etc/openvpn/pki/private/server.key
dh /etc/openvpn/pki/dh.pem
server 10.10.10.0 255.255.255.0
route 192.168.10.0 255.255.255.0
push "route 192.168.10.0 255.255.255.0"
ifconfig-pool-persist ipp.txt
client-to-client
client-config-dir /etc/openvpn/client
keepalive 10 120
persist-key
persist-tun
tls-auth ta.key 0
comp-lzo
status /var/log/openvpn-status.log
log /var/log/openvpn.log
verb 3
т.к. используется нестандартный порт openvpn необходимо выполнить настройку SELinux:
semanage port -a -t openvpn_port_t -p udp 1207
Конфигурация клиента:
dev tun
proto udp
remote 192.168.56.103 1207
client
resolv-retry infinite
ca ./ca.crt
cert ./client.crt
key ./client.key
route 192.168.10.0 255.255.255.0
persist-key
persist-tun
comp-lzo
verb 3
tls-auth ta.key 1
После подключения клиента в системе появляется интерфейс tun0
, в таблице маршрутизации появляются маршруты через этот интерфейс, пингуется адрес сервера:
root@nas:/etc/openvpn# openvpn --config server.conf --daemon
root@nas:/etc/openvpn#
root@nas:/etc/openvpn#
root@nas:/etc/openvpn# ping 10.10.10.1 -c 2
PING 10.10.10.1 (10.10.10.1) 56(84) bytes of data.
64 bytes from 10.10.10.1: icmp_seq=1 ttl=64 time=2.41 ms
64 bytes from 10.10.10.1: icmp_seq=2 ttl=64 time=2.79 ms
--- 10.10.10.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 2.411/2.601/2.792/0.190 ms
root@nas:/etc/openvpn#
root@nas:/etc/openvpn#
root@nas:/etc/openvpn#
root@nas:/etc/openvpn# ip route
default via 192.168.88.1 dev enp4s0
10.10.10.0/24 via 10.10.10.5 dev tun0
10.10.10.5 dev tun0 proto kernel scope link src 10.10.10.6
78.29.2.21 via 192.168.88.1 dev enp4s0
78.29.2.22 via 192.168.88.1 dev enp4s0
192.168.10.0/24 via 10.10.10.5 dev tun0
192.168.56.0/24 dev vboxnet0 proto kernel scope link src 192.168.56.1
192.168.88.0/24 dev enp4s0 proto kernel scope link src 192.168.88.212
192.168.88.1 dev enp4s0 scope link
root@nas:/etc/openvpn#
root@nas:/etc/openvpn#
root@nas:/etc/openvpn#
root@nas:/etc/openvpn# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp4s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:25:22:f7:15:57 brd ff:ff:ff:ff:ff:ff
inet 192.168.88.212/24 brd 192.168.88.255 scope global enp4s0
valid_lft forever preferred_lft forever
inet 192.168.88.254/24 brd 192.168.88.255 scope global secondary dynamic enp4s0
valid_lft 164515sec preferred_lft 164515sec
inet6 fe80::225:22ff:fef7:1557/64 scope link
valid_lft forever preferred_lft forever
3: vboxnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 0a:00:27:00:00:00 brd ff:ff:ff:ff:ff:ff
inet 192.168.56.1/24 brd 192.168.56.255 scope global vboxnet0
valid_lft forever preferred_lft forever
inet6 fe80::800:27ff:fe00:0/64 scope link
valid_lft forever preferred_lft forever
5: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UNKNOWN group default qlen 500
link/none
inet 10.10.10.6 peer 10.10.10.5/32 scope global tun0
valid_lft forever preferred_lft forever
inet6 fe80::edf9:26b0:1f21:fb29/64 scope link stable-privacy
valid_lft forever preferred_lft forever
Файл статуса openvpn содержит о подключенном клиенте и маршрутах:
[root@ras vagrant]# cat /var/log/openvpn-status.log
OpenVPN CLIENT LIST
Updated,Fri Nov 4 12:15:25 2022
Common Name,Real Address,Bytes Received,Bytes Sent,Connected Since
client,192.168.56.1:38261,3490,3134,Fri Nov 4 12:15:03 2022
ROUTING TABLE
Virtual Address,Common Name,Real Address,Last Ref
10.10.10.6,client,192.168.56.1:38261,Fri Nov 4 12:15:04 2022
192.168.33.0/24,client,192.168.56.1:38261,Fri Nov 4 12:15:04 2022
GLOBAL STATS
Max bcast/mcast queue length,0
END
Полученный в ходе работы Vagrantfile
и плейбук Ansible помещены в публичный репозиторий. Создаются 3 машины:
server
,client
. Тип интерфейсаtun\tap
зависит от значения переменнойovpndev
в файлеansible\defaults\main.yml
.ras
для подключения с хостовой машины клиентом openvpn, конфиг\ключи\сертификаты для подключения клиента содержатся вansible\files\client.conf\
Генерация ключей и сертификатов PKI предварительно выполнена.