Туннелирование и IPSec
«Определение»: инкапсуляция трафика внутрь специального сетевого протокола
Задачи:
- Организация общего адресного пространства
- Аутентификация и шифрование трафика целиком
Простейшее решение: использовать прикладной уровень:
- Подключение и авторизация
Клиент Сервер VPN-клиент ---> eth0: 5.6.7.8 ---> (Интернет) ---> eth0: 1.2.3.4 ---> VPN-сервер
- Создание виртуальных сетевых tun или tap интерфейсов и настройка их как обычных сетевых карт:
Клиент Сервер VPN-клиент <--> eth0: 5.6.7.8 <--> (Интернет) <--> eth0: 1.2.3.4 <--> VPN-сервер | | tun0: 192.168.10.2 tun0: 192.168.10.1
- Обмен данными через туннель:
VPN-клиент <--> eth0: 5.6.7.8 <--> (Интернет) <--> eth0: 1.2.3.4 <--> VPN-сервер | | tun0: 192.168.10.2 <-- (Пакет для 102.168.10.1) … <-- tun0: 192.168.10.1
На всем протяжении пути от 5.6.7.8 до 1.2.3.4 пакет не меняется.- TCP over TCP ⇒ использование UDP
- Паразитная нагрузка (поля транспортного и прикладного уровней)
Использовать сетевой уровень ( «IP over IP») :
- Параметры виртуального сетевого интерфейса: собственный IP-адрес и IP-адреса концов туннеля
Всякий попавший в tun0 пакет инкапсулируется в IP-пакет (например, протокола GRE) с адресами конца туннеля, а этот пакет маршрутизируется
- Проблемы с NAT вида «много в один»
- Шифрование и аутентификация отсутствуют
Пример: настройка GRE-тоннеля
- На одной стороне:
# ip a show dev enp0s8 2: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000 link/ether 08:00:27:4c:12:2a brd ff:ff:ff:ff:ff:ff inet 10.30.50.3/24 brd 10.30.50.255 scope global enp0s8 inet6 fe80::a00:27ff:fe4c:122a/64 scope link valid_lft forever preferred_lft forever # ip tunnel add tun mode gre remote 10.50.70.3 local 10.30.50.3 # ip a a 192.168.0.30/24 dev tun # ip l set up dev tun [root@uneexclient ~]# ip a show dev tun 5: tun: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1476 qdisc noqueue state UNKNOWN link/gre 10.30.50.3 peer 10.50.70.3 inet 192.168.0.30/24 scope global tun inet6 fe80::5efe:a1e:3203/64 scope link valid_lft forever preferred_lft forever
На другой строне:# ip a show dev enp0s8 2: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000 link/ether 08:00:27:d8:46:fd brd ff:ff:ff:ff:ff:ff inet 10.50.70.3/24 brd 10.50.70.255 scope global enp0s8 inet6 fe80::a00:27ff:fed8:46fd/64 scope link valid_lft forever preferred_lft forever # ip tunnel add tun mode gre remote 10.30.50.3 local 10.50.70.3 # ip a a 192.168.0.50/24 dev tun # ip a show dev tun 5: tun: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1476 qdisc noqueue state UNKNOWN link/gre 10.50.70.3 peer 10.30.50.3 inet 192.168.0.50/24 scope global tun inet6 fe80::5efe:a32:4603/64 scope link valid_lft forever preferred_lft forever # ping 192.168.0.30 PING 192.168.0.30 (192.168.0.30) 56(84) bytes of data. 64 bytes from 192.168.0.30: icmp_req=1 ttl=64 time=1.54 ms … # traceroute -n 192.168.0.30 traceroute to 192.168.0.30 (192.168.0.30), 30 hops max, 60 byte packets 1 192.168.0.30 1.145 ms 1.145 ms 1.195 ms