туннели сквозь Интернет

Настройка, программирование, распределённые вычисления

Модераторы: Olej, bellic, vikos

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

туннели сквозь Интернет

Непрочитанное сообщение Olej » 23 окт 2023, 21:30

По информации справочно-информационного портала «Русский язык», «тоннель» и «туннель» - равноправные орфографические варианты (формы написания одного слова). В любом контексте возможно употребление любого из этих вариантов.
Наличие орфографических вариантов связано с историей слова: оно пришло из английского языка, в котором словом tunnel был назван проход под Темзой, построенный французским инженером Брюнелем.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

туннели сквозь Интернет

Непрочитанное сообщение Olej » 23 окт 2023, 21:32

Как частный случай, у нас уже есть тема: туннель SSH к удалённым хостам
31 янв 2022
Но вопрос шире: как прокладывать туннели в Интернет тогда, когда провайдер/администратор/хостер не хочет меня куда-то допускать :?:

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

туннели сквозь Интернет

Непрочитанное сообщение Olej » 23 окт 2023, 21:37

Olej писал(а):
23 окт 2023, 21:32
как прокладывать туннели в Интернет тогда, когда провайдер/администратор/хостер не хочет меня куда-то допускать
Например ... используя IPv6 трафик Yggdrasil:
IPIP-туннель
GRE-туннель
Проброс соединений 6-4 (4-6) с помощью socat

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

туннели сквозь Интернет

Непрочитанное сообщение Olej » 24 окт 2023, 14:56

Olej писал(а):
23 окт 2023, 21:37
используя IPv6 трафик Yggdrasil
Что интересно с Yggdrasil? - Что для экспериментов с туннелированием не нужны хосты с "белым" IP (как, например, для SSH туннелей). Можно прокладывать туннели между хостами LAN закрытыми NAT провайдеров, и разнесённых на тысячи километров :-o .
И даже можно отрабатывать, с равным успехом, эти техники на 2-х срседних узлах LAN ... а затем запросто, тупо перенести это в любую геометрию, и это будет работать - за счёт IPv6.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

туннели сквозь Интернет

Непрочитанное сообщение Olej » 25 окт 2023, 16:24

Olej писал(а):
24 окт 2023, 14:56
для экспериментов с туннелированием не нужны хосты с "белым" IP
Olej писал(а):
23 окт 2023, 21:37
IPIP-туннель
в одном из чатов сообщества кто-то поделился PDF-файлом, в котором описывалось создание IPIP-туннеля поверх Yggdrasil. Автор использовал эти технологии для организации VPN-сервера на VPS, когда используемый им ранее протокол Wireguard начала блокировать тёмная сторона…
Вот эта статья, где этот "кто-то поделился" ... и даже прикреплю её сюда, чтобы не потерялась...
Вложения
yggdrasil_vpn.pdf
(135.09 КБ) 19 скачиваний

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

туннели сквозь Интернет

Непрочитанное сообщение Olej » 25 окт 2023, 16:28

Olej писал(а):
24 окт 2023, 14:56
И даже можно отрабатывать, с равным успехом, эти техники на 2-х срседних узлах LAN ...
Ну что ж ... поехали :!:
Olej писал(а):
25 окт 2023, 16:24
IPIP-туннель

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

туннели сквозь Интернет

Непрочитанное сообщение Olej » 25 окт 2023, 16:58

Olej писал(а):
25 окт 2023, 16:24
Вот эта статья
1.
Выполним следующую команду на вашем локальном компьютере:

Код: Выделить всё

[olej@xenix ~]$ ip -br a show tun0
tun0             UNKNOWN        201:1171:48a7:6391:3920:2499:1ebd:757f/7 fe80::9daf:b75c:f4e:7b60/64 
Это будет мой клиент, и его IPv6 (Local IP) ... это хост xenix, для однозначности, чтобы не запутаться...
Выполним туже самую команду на нашем vps:

Код: Выделить всё

olej@esprimop420:~$ ip -br a show tun0
tun0             UNKNOWN        201:617b:8699:5a7f:356b:1da6:a5d6:c960/7 fe80::da81:772e:632d:9eba/64 
А это мой ретранслятор (у автора он везде проходит как vps), и его удалённый IPv6 (Remote IP)... это хост esprimop420

2.
Создадим туннель на локальной машине:

Код: Выделить всё

[olej@xenix ~]$ sudo ip link add name ipip6 type ip6tnl local 201:1171:48a7:6391:3920:2499:1ebd:757f \
> remote 201:617b:8699:5a7f:356b:1da6:a5d6:c960 mode ipip6
[sudo] пароль для olej: 

[olej@xenix ~]$ echo $?
0
После создания туннеля у нас появятся два новых интерфейса:

Код: Выделить всё

[olej@xenix ~]$ ip -br a
lo               UNKNOWN        127.0.0.1/8 ::1/128 
enp2s0           UP             192.168.1.20/24 31c:4cbf:9e0b:2904::4/64 fe80::bdc9:d183:f9c0:ff56/64 
virbr0           DOWN           192.168.122.1/24 
tun0             UNKNOWN        201:1171:48a7:6391:3920:2499:1ebd:757f/7 fe80::9daf:b75c:f4e:7b60/64 
ip6tnl0@NONE     DOWN           
ipip6@NONE       DOWN           
Работать мы будем с интерфейсом ipip6
Включим этот интерфейс:

Код: Выделить всё

olej@xenix ~]$ sudo ip link set ipip6 up

Код: Выделить всё

[olej@xenix ~]$ ip a s dev ipip6
6: ipip6@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1452 qdisc noqueue state UNKNOWN group default qlen 1000
    link/tunnel6 201:1171:48a7:6391:3920:2499:1ebd:757f peer 201:617b:8699:5a7f:356b:1da6:a5d6:c960 permaddr ae4:147d:bc8a::
    inet6 fe80::8e4:14ff:fe7d:bc8a/64 scope link proto kernel_ll 
       valid_lft forever preferred_lft forever

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

туннели сквозь Интернет

Непрочитанное сообщение Olej » 25 окт 2023, 17:20

3.
Далее вам нужно будет определиться с адресом подсети ipv4 , которая будет работать внутри
туннеля. Это может быть например 192.168.44.0/30 .
Пускай это будут:
192.168.44.1 #Для удаленного vps
192.168.44.2 #Для локальной машины
Я для разнообразия ... и для того чтобы это никак не пересекалось с IP в моей достаточно широкой LAN со всякими экспериментами - выберу IPv4 из класса B: 172.16.0.0 — 172.31.255.255 (маска подсети: 255.240.0.0 или /12):
- 172.16.1.1 #Для удаленного ретранслятора esprimop420
- 172.16.1.2 #Для локальной машины xenix

Код: Выделить всё

[olej@xenix ~]$ sudo ip address add 172.16.1.2/30 dev ipip6
[sudo] пароль для olej: 

Код: Выделить всё

[olej@xenix ~]$ ip a s dev ipip6
6: ipip6@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1452 qdisc noqueue state UNKNOWN group default qlen 1000
    link/tunnel6 201:1171:48a7:6391:3920:2499:1ebd:757f peer 201:617b:8699:5a7f:356b:1da6:a5d6:c960 permaddr ae4:147d:bc8a::
    inet 172.16.1.2/30 scope global ipip6
       valid_lft forever preferred_lft forever
    inet6 fe80::8e4:14ff:fe7d:bc8a/64 scope link proto kernel_ll 
       valid_lft forever preferred_lft forever
Из этой подсети с такой маской мы можем взять только два адреса (а больше в нашем случае и не нужно). Первый для конца туннеля на
локальной машине, второй для конца туннеля на удаленном vps.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

туннели сквозь Интернет

Непрочитанное сообщение Olej » 25 окт 2023, 17:31

4.
Маршрутизация
Теперь нам нужно отправить наш ipv4 трафик на vps. На локальной машине нам нужно будет
создать пару маршрутов.
Подставьте вместо XX.XX.XX.XX/32 ip адрес вашего пира, а вместо YY.YY.YY.YY ip адрес
вашего домашнего роутера, wifi0 - замените на интерфейс на котором у вас ваша домашняя
сеть.

Код: Выделить всё

sudo ip route add XX.XX.XX.XX/32 via YY.YY.YY.YY dev wifi0
Тут нужно пояснить. У вас в Yggdrasil прописан как минимум один peer через которого вы
выходите в сеть.
Так вот нам нужно что-бы соединение с этим пиром шло обязательно через "клирнет", не через
сеть Yggdrasil.
Потому-что мы не можем соединиться с сетью Yggdrasil через неё же саму, получается
зацикливание. Из-за этого ничего работать не будет.
Для этого нам и нужен маршрут, который будет всегда "роутить" соединение до пира через
обычный интернет. Как раз это правило маршрутизации нам в этом поможет.
Тут не очень понятное место...
Чтоб не промахнуться относительно пиров Yggdrasil, начну с этого:

Код: Выделить всё

[olej@xenix ~]$ systemctl status --no-pager --full yggdrasil
● yggdrasil.service - yggdrasil
     Loaded: loaded (/etc/systemd/system/yggdrasil.service; enabled; preset: disabled)
    Drop-In: /usr/lib/systemd/system/service.d
             └─10-timeout-abort.conf
     Active: active (running) since Wed 2023-10-25 09:53:14 EEST; 7h ago
   Main PID: 1442 (yggdrasil)
      Tasks: 16 (limit: 9337)
     Memory: 14.5M
     CGroup: /system.slice/yggdrasil.service
             └─1442 /usr/local/sbin/yggdrasil -useconffile /etc/yggdrasil.conf

окт 25 16:47:11 xenix.localdomain yggdrasil[1442]: 2023/10/25 16:47:11 Disconnected inbound TLS: 21d:8a7c:aafa:f346:8115:14aa:9ca4:cd7f@fe80::9bac:3791:1b79:7237, source [fe80::bdc9:d183:f9c0:ff56%enp2s0]:34079; error: read tcp [fe80::bdc9:d183:f9c0:ff56%enp2s0]:34079->[fe80::9bac:3791:1b79:7237%enp2s0]:45111: i/o timeout
окт 25 16:50:51 xenix.localdomain yggdrasil[1442]: 2023/10/25 16:50:51 Connected outbound TLS: 21d:8a7c:aafa:f346:8115:14aa:9ca4:cd7f@fe80::9bac:3791:1b79:7237, source [fe80::bdc9:d183:f9c0:ff56%enp2s0]:52061
окт 25 16:50:53 xenix.localdomain yggdrasil[1442]: 2023/10/25 16:50:53 Connected inbound TLS: 21d:8a7c:aafa:f346:8115:14aa:9ca4:cd7f@fe80::13f5:9fe2:6393:bf4a, source [fe80::bdc9:d183:f9c0:ff56%enp2s0]:34079
окт 25 16:52:03 xenix.localdomain yggdrasil[1442]: 2023/10/25 16:52:03 Disconnected outbound TLS: 21d:8a7c:aafa:f346:8115:14aa:9ca4:cd7f@fe80::9bac:3791:1b79:7237, source [fe80::bdc9:d183:f9c0:ff56%enp2s0]:52061
окт 25 16:52:03 xenix.localdomain yggdrasil[1442]: 2023/10/25 16:52:03 Disconnected inbound TLS: 21d:8a7c:aafa:f346:8115:14aa:9ca4:cd7f@fe80::13f5:9fe2:6393:bf4a, source [fe80::bdc9:d183:f9c0:ff56%enp2s0]:34079
окт 25 16:52:04 xenix.localdomain yggdrasil[1442]: 2023/10/25 16:52:04 Failed to dial TLS [fe80::9bac:3791:1b79:7237]:45605: dial tcp [fe80::bdc9:d183:f9c0:ff56%enp2s0]:0->[fe80::9bac:3791:1b79:7237%enp2s0]:45605: connect: connection refused
окт 25 16:52:05 xenix.localdomain yggdrasil[1442]: 2023/10/25 16:52:05 Failed to dial TLS [fe80::9bac:3791:1b79:7237]:45605: dial tcp [fe80::bdc9:d183:f9c0:ff56%enp2s0]:0->[fe80::9bac:3791:1b79:7237%enp2s0]:45605: connect: connection refused
окт 25 16:52:06 xenix.localdomain yggdrasil[1442]: 2023/10/25 16:52:06 Failed to dial TLS [fe80::9bac:3791:1b79:7237]:45605: dial tcp [fe80::bdc9:d183:f9c0:ff56%enp2s0]:0->[fe80::9bac:3791:1b79:7237%enp2s0]:45605: connect: connection refused
окт 25 16:56:39 xenix.localdomain yggdrasil[1442]: 2023/10/25 16:56:39 Connected outbound TLS: 21d:8a7c:aafa:f346:8115:14aa:9ca4:cd7f@fe80::13f5:9fe2:6393:bf4a, source [fe80::bdc9:d183:f9c0:ff56%enp2s0]:51851
окт 25 16:56:41 xenix.localdomain yggdrasil[1442]: 2023/10/25 16:56:41 Connected outbound TLS: 21d:8a7c:aafa:f346:8115:14aa:9ca4:cd7f@fe80::9bac:3791:1b79:7237, source [fe80::bdc9:d183:f9c0:ff56%enp2s0]:51677
Здесь видно используемый конф., у меня их может быть несколько...

Код: Выделить всё

[olej@xenix ~]$ sudo yggdrasilctl getpeers
[sudo] пароль для olej: 
Port	                           Public Key                           	              IP Address              	 Uptime 	 RX  	  TX  	Pr	                     URI                       
1   	2493ffffffffec63eb18516ce50a3dc2667e29d49fb8b9bd7b39ffe94a32c882	202:db60::9ce0:a73d:7498:d7ae         	7h48m52s	795kb	446kb 	0 	tcp://195.123.245.146:7743                    	
2   	0000000230d4e2faac3a016ed5a5541a1e89bf6640ffd1e083be71e8dae575db	21e:e795:8e82:a9e2:ff48:952d:55f2:f0bb	7h16m0s 	624kb	125kb 	0 	tcp://51.15.204.214:12345                     	
3   	91deffffffffe01abab3514ca4cfc27ec04dc261c801d285f0ce06e3314f8b6e	200:dc42::3fca:8a99:5d66:b660         	7h48m52s	529kb	259kb 	0 	tcp://y.zbin.eu:7743                          	
4   	000000c70d438dbb3b7a4712404207070f34e500cd47cef73f26dd54e8f5d591	218:71e5:78e4:8989:b71:db7f:7bf1:f1e1 	2h22m59s	40kb 	19kb  	0 	tcp://yggdrasil.su:62486                      	
5   	4d758aceabcdd2431559468a27a4cda8d46a3899e27a2d41c26ed599a0b902f0	201:ca29:d4c5:50c8:b6f3:aa9a:e5d7:616c	7h48m52s	43kb 	132kb 	0 	tcp://158.101.229.219:17002                   	
6   	00000005d60d541432e5fbabad558d6cca02aaddbb3363fcd3a8421934e4d575	21d:8a7c:aafa:f346:8115:14aa:9ca4:cd7f	45m28s  	 8kb 	 8kb  	0 	tls://[fe80::13f5:9fe2:6393:bf4a]:44937       	
7   	00000005d60d541432e5fbabad558d6cca02aaddbb3363fcd3a8421934e4d575	21d:8a7c:aafa:f346:8115:14aa:9ca4:cd7f	45m26s  	 4kb 	 4kb  	0 	tls://[fe80::9bac:3791:1b79:7237]:42657       	
8   	0000000d9a030fa6b7de7f1f1c2b4754e9fb66086cf971f7997576e842902ef4	21c:4cbf:9e0b:2904:301c:1c7a:9715:62c0	7h48m51s	131kb	1010kb	0 	tls://[fe80::522d:d0bd:b221:a526%enp2s0]:41241

Нужно думать, что в описании имеются в виду внешние IPv4 пиры...
Пробую в качестве XX.XX.XX.XX - 195.123.245.146
На всякий случай (жив ли?):

Код: Выделить всё

[olej@xenix ~]$ ping -c3 195.123.245.146
PING 195.123.245.146 (195.123.245.146) 56(84) bytes of data.
64 bytes from 195.123.245.146: icmp_seq=1 ttl=54 time=35.5 ms
64 bytes from 195.123.245.146: icmp_seq=2 ttl=54 time=35.4 ms
64 bytes from 195.123.245.146: icmp_seq=3 ttl=54 time=35.3 ms

--- 195.123.245.146 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 35.324/35.408/35.470/0.061 ms
А по поводу дефаултного интерфейса LAN:

Код: Выделить всё

[olej@xenix IPv6]$ ip a s dev enp2s0
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 90:1b:0e:2b:e1:9c brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.20/24 brd 192.168.1.255 scope global noprefixroute enp2s0
       valid_lft forever preferred_lft forever
    inet6 31c:4cbf:9e0b:2904::4/64 scope global noprefixroute 
       valid_lft forever preferred_lft forever
    inet6 fe80::bdc9:d183:f9c0:ff56/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

Код: Выделить всё

[olej@xenix IPv6]$ ip r s
default via 192.168.1.3 dev enp2s0 proto static metric 100 
172.16.1.0/30 dev ipip6 proto kernel scope link src 172.16.1.2 
192.168.1.0/24 dev enp2s0 proto kernel scope link src 192.168.1.20 metric 100 
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown 
IPv4 роутится с этого хоста через интерфейс enp2s0 на IP шлюза 192.168.1.3

Итого ... решением этой головоломки будет:

Код: Выделить всё

[code]
[olej@xenix ~]$ sudo ip route add 195.123.245.146/32 via 192.168.1.3 dev enp2s0
[sudo] пароль для olej: 

Код: Выделить всё

[olej@xenix IPv6]$ ip r s
default via 192.168.1.3 dev enp2s0 proto static metric 100 
172.16.1.0/30 dev ipip6 proto kernel scope link src 172.16.1.2 
192.168.1.0/24 dev enp2s0 proto kernel scope link src 192.168.1.20 metric 100 
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown 
195.123.245.146 via 192.168.1.3 dev enp2s0 
Вот эта последняя строка...

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

туннели сквозь Интернет

Непрочитанное сообщение Olej » 25 окт 2023, 18:06

5.
Маршрутизация
Далее прописываем следующий маршрут. Этот маршрут будет отправлять весь остальной
трафик через наш туннель на vps.

Код: Выделить всё

sudo ip route add 0.0.0.0/0 via 192.168.44.2 dev ipip6

Код: Выделить всё

[olej@xenix ~]$ sudo ip route add 0.0.0.0/0 via 172.16.1.2 dev ipip6
[sudo] пароль для olej:

Код: Выделить всё

[olej@xenix ~]$ ip r s
default via 172.16.1.2 dev ipip6
default via 192.168.1.3 dev enp2s0 proto static metric 100
172.16.1.0/30 dev ipip6 proto kernel scope link src 172.16.1.2
192.168.1.0/24 dev enp2s0 proto kernel scope link src 192.168.1.20 metric 100
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown
195.123.245.146 via 192.168.1.3 dev enp2s0
1-я строка таблицы.

Ответить

Вернуться в «Сети»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 11 гостей