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

от автора

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 года


ссылка на оригинал статьи https://habr.com/ru/post/470243/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *