Tinc — настройка VPN в Ubuntu

в 22:49, , рубрики: mesh network, tinc, vpn, информационная безопасность, системное администрирование
Tinc — это открытый сетевой протокол и программная реализация, используемая для сжатых и зашифрованных виртуальных частных сетей. Это проект был начат в 1998 году Гусом Слипеном, Иво Тиммермансом и Весселем Данкерсом под лицензией GPL.

К его основным достоинствам относится:
1) Респределенная топология (нет необходимости в мощном сервере VPN).
2) Работет поверх сетей любой топологии, в том числе за NAT и поверх других VPN.
3) Поддерживает активное соединение даже после переключения сети (например с wi-fi на 4g) или при входе и выходе из других VPN.
4) Работет в большинстве операционных систем, в том числе Windows XP.

К этому можно добавить, что tinc входит во все дистирбутивы Linux, то есть его можно установить и сразу пользоваться.

При этом tinc у широкой публики не пользуется популярностью. Одна из причин — очень лаконичная документация, которая создавалась в университетской среде, и поэтому является скорее академической, чем доступной для быстрого прочтения.

В этом сообщении я опишу конфигурацию tinc VPN в операционной истеме Ubuntu.

Устанавливаем пакет sudo apt-get install tinc.

Поскольку сеть имеет ячеистую топологию — нет сереверного или клиентского варианта программного обеспечения.

В нашем примере будет две машины. Первую условно назовем «сервер» — будет открыта для доступа из интернет по имени alpha.example.com (или по ip адресу). Вторая машина будет в некоторой сети не имея открытого в интернет ip адреса (4g, wi-fi, условно назовем ее «домашний компьютер»)

Теперь нам нужно выбрать имя для сети. В нашем примере это будет alpha.

Сначла работем на «сервере» с адресом alpha.example.com. Создаем структуру каталогов для конфигов sudo mkdir -p /etc/tinc/alpha/hosts.

Создаем конфиг сети alpha /etc/tinc/alpha/tinc.conf:

Name = server_01
AddressFamily = ipv4
Interface = tun0

В каталоге /etc/tinc/alpha/hosts будут храниться открытые ключи текущей машины и других доступных в сети alpha машин. Создадим файл /etc/tinc/alpha/hosts/server_01:

Address = alpha.example.com
Subnet = 10.0.0.1/32
Subnet = 0.0.0.0/0

Address задается в случае если у машины есть доступный адрес (например публичный адрес в сети интернет) или доменное имя.
Subnet = 10.0.0.1/32 задает адрес машины в сети alpha.
Subnet = 0.0.0.0/0 включается только в том случае, когда неоходимо весь трафик от других машин в интернет направить через текущую машину (это не обязательно).

Сгенерируем открытый и закрытый ключ командой sudo tincd -n alpha -K 4096.

Создадим файлы, который будут выполняться при старте и остановке сети
/etc/tinc/alpha/tinc-up:

#!/bin/sh
ip link set $INTERFACE up
ip addr add 10.0.0.1/32 dev $INTERFACE
ip route add 10.0.0.0/24 dev $INTERFACE

/etc/tinc/alpha/tinc-down:

#!/bin/sh
ip route del 10.0.0.0/24 dev $INTERFACE
ip addr del 10.0.0.1/32 dev $INTERFACE
ip link set $INTERFACE down

Сделаем эти файлы выполняемыми sudo chmod 755 /etc/tinc/alpha/tinc-*

Запустим сеть alpha на текущей машине sudo tincd -n alpha -D -d5

Теперь перейдем на «домашний компьютер» и повторим все действия (с небольшими изменениями):

sudo apt-get install tinc

sudo mkdir -p /etc/tinc/alpha/hosts

/etc/tinc/alpha/tinc.conf:

Name = client_01
AddressFamily = ipv4
Interface = tun0
ConnectTo = server_01

/etc/tinc/alpha/hosts/client_01:

Subnet = 10.0.0.2/32

sudo tincd -n alpha -K 4096.

/etc/tinc/alpha/tinc-up:

#!/bin/sh
ip link set $INTERFACE up
ip addr add 10.0.0.2/32 dev $INTERFACE
ip route add 10.0.0.0/24 dev $INTERFACE

/etc/tinc/alpha/tinc-down:

#!/bin/sh
ip route del 10.0.0.0/24 dev $INTERFACE
ip addr del 10.0.0.2/32 dev $INTERFACE
ip link set $INTERFACE down

sudo chmod 755 /etc/tinc/alpha/tinc-*

sudo tincd -n alpha -D -d5

Теперь неободимо обменяться публичными ключами в каталогах /etc/tinc/alpha/hosts, чтобы их содержимое на обоеих машинах было одинаковое.

Итак, сеть настроена. С компьютера 10.0.0.1 доступен компьютер 10.0.0.2 и наоборот.

Иногда необходимо, чтобы вест трафик с «домашнео компьютера» шел через «сервер» (то для чего сейчас VPN используется довольно часто).

Напомню, что для этого в конфиге сервера мы предусмотрели параметр Subnet = 0.0.0.0/0

Кроме этого, необходимо изменить скрипты конфигурирования сети на «домашнем компьютере:

/etc/tinc/alpha/tinc-up:

#!/bin/sh
REMOTEADDRESS=X.X.X.X
VPN_GATEWAY=10.0.0.1
ORIGINAL_GATEWAY=`ip route show | grep ^default | cut -d ' ' -f 2-5`

ip link set $INTERFACE up
ip addr add 10.0.0.2/32 dev $INTERFACE
ip route add 10.0.0.0/24 dev $INTERFACE
ip route add $REMOTEADDRESS $ORIGINAL_GATEWAY
ip route add $VPN_GATEWAY dev $INTERFACE
ip route add 0.0.0.0/1 via $VPN_GATEWAY dev $INTERFACE
ip route add 128.0.0.0/1 via $VPN_GATEWAY dev $INTERFACE

/etc/tinc/alpha/tinc-down

#!/bin/sh
REMOTEADDRESS=X.X.X.X
VPN_GATEWAY=10.0.0.1
ORIGINAL_GATEWAY=`ip route show | grep ^default | cut -d ' ' -f 2-5`

ip route del $REMOTEADDRESS $ORIGINAL_GATEWAY
ip route del $VPN_GATEWAY dev $INTERFACE
ip route del 0.0.0.0/1 dev $INTERFACE
ip route del 128.0.0.0/1 dev $INTERFACE
ip route del 10.0.0.0/24 dev $INTERFACE
ip addr del 10.0.0.1/32 dev $INTERFACE
ip link set $INTERFACE down

После этого весь Ваш трафик будет направлен на „сервер“. Но это еще не означает что сервер будет его пересылать на другие адреса. Для этого нужно еще дополнительно настроить сеть на „сервере“. Дальнейшие действия будут сильно зависеть от конфигурации сети. В наиболее простом случае помогут команды, которые можно выполнять только если Вы знаете что они делают:

###   Этот код может нанести вред Вашему компьютеру   ###

sudo iptables -P FORWARD DROP
sudo iptables -I FORWARD -i tun0 -o enp35s0 -j ACCEPT
sudo iptables -I FORWARD -o tun0 -i enp35s0 -j ACCEPT
sudo iptables -t nat -I POSTROUTING -o enp35s0 -j MASQUERADE

Полезные ссылки

1. www.digitalocean.com/community/tutorials/how-to-install-tinc-and-set-up-a-basic-vpn-on-ubuntu-18-04-ru
2. www.tinc-vpn.org/examples/windows-install
3. www.tinc-vpn.org/examples/redirect-gateway

apapacy@gmail.com
30 января 2022 года

Автор:
apapacy

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js