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

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

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

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

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

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

Olej писал(а):
26 окт 2023, 22:21
хочу рассчитывать на совместимость (синтаксиса команд iptables)
Теперь мы напишем правила для iptables , которые проведут наш трафик из туннеля в
интернет.
Вместо eth0 подставьте интерфейс с которого у вас выход в интернет

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

# Эти два правила разрешат пересылку пакетов между интерфейсами
sudo iptables -A FORWARD -i eth0 -o ipip6 -j ACCEPT
sudo iptables -A FORWARD -i ipip6 -o eth0 -j ACCEPT
Интерфейсы ретранслятора:

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

olej@esprimop420:~$ ip l
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 90:1b:0e:2b:fe:3a brd ff:ff:ff:ff:ff:ff
3: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 53049 qdisc fq_codel state UNKNOWN mode DEFAULT group default qlen 500
    link/none 
4: ip6tnl0@NONE: <NOARP> mtu 1452 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/tunnel6 :: brd :: permaddr da56:27af:f34f::
5: ipip6@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 53001 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/tunnel6 201:617b:8699:5a7f:356b:1da6:a5d6:c960 peer 201:1171:48a7:6391:3920:2499:1ebd:757f permaddr 62ff:a701:696d::

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

root@esprimop420:~# iptables -A FORWARD -i enp3s0 -o ipip6 -j ACCEPT

root@esprimop420:~# echo $?
0

root@esprimop420:~# nft list table ip filter
table ip filter {
	chain FORWARD {
		type filter hook forward priority filter; policy accept;
		iifname "enp3s0" oifname "ipip6" counter packets 0 bytes 0 accept
	}
}

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

root@esprimop420:~# iptables -A FORWARD -i ipip6 -o eth0 -j ACCEPT

root@esprimop420:~# echo $?
0

root@esprimop420:~# nft list table ip filter
table ip filter {
	chain FORWARD {
		type filter hook forward priority filter; policy accept;
		iifname "enp3s0" oifname "ipip6" counter packets 0 bytes 0 accept
		iifname "ipip6" oifname "eth0" counter packets 0 bytes 0 accept
	}
}

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

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

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

# Это правило подменит локальный ip адрес (192.168.44.2) при выходе из интерфейса
eth0 на внешний ip
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

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

root@esprimop420:~# iptables -t nat -A POSTROUTING -o enp3s0 -j MASQUERADE
    
root@esprimop420:~# echo $?
0

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

root@esprimop420:~# nft list tables
table ip filter
table ip6 filter
table ip nat

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

root@esprimop420:~# nft list table ip nat
# Warning: table ip nat is managed by iptables-nft, do not touch!
table ip nat {
	chain POSTROUTING {
		type nat hook postrouting priority srcnat; policy accept;
		oifname "enp3s0" counter packets 78 bytes 5243 masquerade
	}
}

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

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

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

Но самый интересный, мне так кажется, вариант, это когда ретранслятор IPv6->Интернет будет не выделенный сервер с "белым" IP (VPS), а локальный хост, в заурядной LAN, с частным IP, типа 192.168.1.100 + имеющиё сам выход в Интернет через аппаратный роутер и провайдера, со своим NAT...

1. Возможность проброса Yggdrasil/IPv6 туннеля выше я уже проверил...

2. Для исключения влияния роутинга у клиента на работу Yggdrasil, можно просто переконфигурировать клиента так, чтобы он вообще не использовал внешние пиры, а работал через соседей в LAN за счёт IPv6 Multicast ... вот с таким конфигом:

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

[root@xenix etc]# grep -v ^# /etc/yggdrasil.conf | grep " Peers:" -A1
  Peers: [
  ]

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

[root@xenix etc]# grep -v ^# /etc/yggdrasil.conf | grep "MulticastInterfaces:" -A9
  MulticastInterfaces:
  [
    {
      Regex: .*
      Beacon: true
      Listen: true
      Port: 0
      Priority: 0
    }
  ]
Тогда:

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

[root@xenix etc]# systemctl restart yggdrasil

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

[root@xenix etc]# 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 Fri 2023-10-27 18:32:08 EEST; 2s ago
    Process: 12456 ExecStartPre=/sbin/modprobe tun (code=exited, status=0/SUCCESS)
   Main PID: 12457 (yggdrasil)
      Tasks: 10 (limit: 9337)
     Memory: 3.9M
     CGroup: /system.slice/yggdrasil.service
             └─12457 /usr/local/sbin/yggdrasil -useconffile /etc/yggdrasil.conf

окт 27 18:32:08 xenix.localdomain yggdrasil[12457]: 2023/10/27 18:32:08 UNIX admin socket listening on /var/run/yggdrasil.sock
окт 27 18:32:08 xenix.localdomain yggdrasil[12457]: 2023/10/27 18:32:08 TLS listener started on [fe80::bdc9:d183:f9c0:ff56%enp2s0]:38625
окт 27 18:32:08 xenix.localdomain yggdrasil[12457]: 2023/10/27 18:32:08 Interface name: tun0
окт 27 18:32:08 xenix.localdomain yggdrasil[12457]: 2023/10/27 18:32:08 Interface IPv6: 201:1171:48a7:6391:3920:2499:1ebd:757f/7
окт 27 18:32:08 xenix.localdomain yggdrasil[12457]: 2023/10/27 18:32:08 Interface MTU: 53049
окт 27 18:32:08 xenix.localdomain yggdrasil[12457]: 2023/10/27 18:32:08 Your public key is 7ba3add6271bb1b7f6d9b850a2a00b57db7179a82d162afc0e15889f62aa0773
окт 27 18:32:08 xenix.localdomain yggdrasil[12457]: 2023/10/27 18:32:08 Your IPv6 address is 201:1171:48a7:6391:3920:2499:1ebd:757f
окт 27 18:32:08 xenix.localdomain yggdrasil[12457]: 2023/10/27 18:32:08 Your IPv6 subnet is 301:1171:48a7:6391::/64
окт 27 18:32:08 xenix.localdomain yggdrasil[12457]: 2023/10/27 18:32:08 Connected inbound TLS: 21d:8a7c:aafa:f346:8115:14aa:9ca4:cd7f@fe80::9bac:3791:1b79:7237, source [fe80::bdc9:d183:f9c0:ff56%enp2s0]:38625
окт 27 18:32:08 xenix.localdomain yggdrasil[12457]: 2023/10/27 18:32:08 Connected inbound TLS: 21d:8a7c:aafa:f346:8115:14aa:9ca4:cd7f@fe80::13f5:9fe2:6393:bf4a, source [fe80::bdc9:d183:f9c0:ff56%enp2s0]:38625
...

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

[root@xenix etc]# yggdrasilctl getpeers
Port                               Public Key                                                 IP Address                Uptime   RX      TX     Pr                           URI
1       00000005d60d541432e5fbabad558d6cca02aaddbb3363fcd3a8421934e4d575        21d:8a7c:aafa:f346:8115:14aa:9ca4:cd7f  17s      1kb     2kb    0       tls://[fe80::9bac:3791:1b79:7237%enp2s0]:52537
2       00000005d60d541432e5fbabad558d6cca02aaddbb3363fcd3a8421934e4d575        21d:8a7c:aafa:f346:8115:14aa:9ca4:cd7f  17s      1kb     1kb    0       tls://[fe80::13f5:9fe2:6393:bf4a%enp2s0]:52315
И всё живое:

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

[root@xenix etc]# yggdrasilctl getself
Build name:     yggdrasil
Build version:  0.4.7
IPv6 address:   201:1171:48a7:6391:3920:2499:1ebd:757f
IPv6 subnet:    301:1171:48a7:6391::/64
Coordinates:    [1 246 25 227 5]
Public key:     7ba3add6271bb1b7f6d9b850a2a00b57db7179a82d162afc0e15889f62aa0773
И вот уже такой клиент пробрасывает "серый" IP сквозь Yggdrasil туннель:

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

[olej@xenix Tunnel.IPv6]$ ping 172.16.1.1 -c3
PING 172.16.1.1 (172.16.1.1) 56(84) bytes of data.
64 bytes from 172.16.1.1: icmp_seq=1 ttl=64 time=476 ms
64 bytes from 172.16.1.1: icmp_seq=2 ttl=64 time=84.9 ms
64 bytes from 172.16.1.1: icmp_seq=3 ttl=64 time=78.1 ms

--- 172.16.1.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 78.111/212.955/475.867/185.927 ms


3. И на удалённом ретрансляторе (в даннном случае 172.16.1.1) уже не нужен никакой NAT и маскарадинг, а нужно только настроить роутинг на проброс трафика на его дефаултный интерфейс в Интернет (на его аппаратный роутер)...

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

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

Непрочитанное сообщение Olej » 29 окт 2023, 15:15

Olej писал(а):
28 окт 2023, 01:06
Но самый интересный, мне так кажется, вариант, это когда ретранслятор IPv6->Интернет будет не выделенный сервер с "белым" IP (VPS), а локальный хост, в заурядной LAN, с частным IP, типа 192.168.1.100 + имеющиё сам выход в Интернет через аппаратный роутер и провайдера, со своим NAT...
Удивительные вещи ... но уже 3-й день не могу пробиться ... через необходимость форвардинга с бриджа на локальную сеть :lol:
Подключившись на удалённый хост (десятки километров по трассе) по SSH:

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

olej@R420:~$ ssh olej@200:cd1f:5278:a6cf:31c5:3303:82c1:f1d3
olej@200:cd1f:5278:a6cf:31c5:3303:82c1:f1d3's password:
Last login: Thu Oct 19 19:06:42 2023 from 21d:8a7c:aafa:f346:8115:14aa:9ca4:cd7f
Там создаю конец туннеля:

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

olej@Inspiron:~$ ip -br a show tun0
tun0             UNKNOWN        200:cd1f:5278:a6cf:31c5:3303:82c1:f1d3/7 fe80::832c:2788:e8df:d191/64

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

olej@Inspiron:~$ sudo ip link add name ipip6 type ip6tnl local 200:cd1f:5278:a6cf:31c5:3303:82c1:f1d3 remote 201:1171:48a7:6391:3920:2499:1ebd:757f mode ipip6

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

olej@Inspiron:~$ sudo ip link set ipip6 up

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

olej@Inspiron:~$ sudo ip address add 192.168.0.1/24 dev ipip6

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

olej@Inspiron:~$ ip -br a
lo               UNKNOWN        127.0.0.1/8 ::1/128
enp3s0           UP             192.168.1.5/16 fe80::4ab8:83aa:8297:970a/64
wlp2s0           UP             192.168.1.6/16 fe80::8ec2:9f04:60e:d3e/64
teredo           UNKNOWN        2001:0:d911:c0d9:2c6a:7650:afb6:f19a/32 fe80::ffff:ffff:ffff/64
tun0             UNKNOWN        200:cd1f:5278:a6cf:31c5:3303:82c1:f1d3/7 fe80::832c:2788:e8df:d191/64
ip6tnl0@NONE     DOWN
ipip6@NONE       UNKNOWN        192.168.0.1/24 fe80::70f7:ff:fefa:6bb5/64
Встречно в своей LAN - 2-й конец туннеля:

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

[olej@xenix ~]$ sudo ip link add name ipip6 type ip6tnl local 201:1171:48a7:6391:3920:2499:1ebd:757f remote 200:cd1f:5278:a6cf:31c5:3303:82c1:f1d3 mode ipip6
[sudo] пароль для olej:

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

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

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

[olej@xenix ~]$ ip -br a
lo               UNKNOWN        127.0.0.1/8 ::1/128
enp2s0           UP             192.168.1.20/24 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::3851:cbd6:70fc:3bdf/64
ip6tnl0@NONE     DOWN
ipip6@NONE       UNKNOWN        fe80::b04d:dff:fe57:d5af/64

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

[olej@xenix ~]$ sudo ip address add 192.168.0.2/24 dev ipip6

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

[olej@xenix ~]$ ip -br a
lo               UNKNOWN        127.0.0.1/8 ::1/128
enp2s0           UP             192.168.1.20/24 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::3851:cbd6:70fc:3bdf/64
ip6tnl0@NONE     DOWN
ipip6@NONE       UNKNOWN        192.168.0.2/24 fe80::b04d:dff:fe57:d5af/64

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

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

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

Olej писал(а):
29 окт 2023, 15:15
создаю конец туннеля
Это самая сложная часть ... и она работает "на ура" - вот ping через десятки километров и 2 NAT-а провайдеров, межде "серыми" адресами:

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

[olej@xenix ~]$ ping -c3 192.168.0.1 -Iipip6
PING 192.168.0.1 (192.168.0.1) from 192.168.0.2 ipip6: 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_seq=1 ttl=64 time=215 ms
64 bytes from 192.168.0.1: icmp_seq=2 ttl=64 time=214 ms
64 bytes from 192.168.0.1: icmp_seq=3 ttl=64 time=214 ms

--- 192.168.0.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 213.796/214.324/214.823/0.419 ms
И даже между всеми интерфейсами/IP удалённого конца туннеля (192.168.1.5 - это на удалённом конце, у меня в LAN такого IP просто нет):

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

[olej@xenix ~]$ ping -c3 192.168.1.5 -Iipip6
PING 192.168.1.5 (192.168.1.5) from 192.168.0.2 ipip6: 56(84) bytes of data.
64 bytes from 192.168.1.5: icmp_seq=1 ttl=64 time=215 ms
64 bytes from 192.168.1.5: icmp_seq=2 ttl=64 time=214 ms
64 bytes from 192.168.1.5: icmp_seq=3 ttl=64 time=214 ms

--- 192.168.1.5 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 213.643/214.321/215.385/0.761 ms
Но завернуть там трафик в его дефаултный роутер в Интернет никак не получается...

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

[olej@xenix ~]$ ping -c3 192.168.1.1 -Iipip6
PING 192.168.1.1 (192.168.1.1) from 192.168.0.2 ipip6: 56(84) bytes of data.

--- 192.168.1.1 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2076ms

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

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

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

Olej писал(а):
29 окт 2023, 15:21
Но завернуть там трафик в его дефаултный роутер
И всё ж у него есть (по части форвардинга между интерфейсами) :!: :-( :

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

root@Inspiron:~# cat /proc/sys/net/ipv4/conf/all/forwarding
0

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

root@Inspiron:~# ls /proc/sys/net/ipv4/conf/
all  default  enp3s0  ip6tnl0  ipip6  lo  teredo  tun0  wlp2s0

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

root@Inspiron:~# echo 1 > /proc/sys/net/ipv4/conf/all/forwarding

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

root@Inspiron:~# cat /proc/sys/net/ipv4/conf/all/forwarding
1

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

root@Inspiron:~# cat /proc/sys/net/ipv4/conf/enp3s0/forwarding
1

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

root@Inspiron:~# cat /proc/sys/net/ipv4/conf/ipip6/forwarding
1

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

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

Непрочитанное сообщение Olej » 29 окт 2023, 15:44

Olej писал(а):
29 окт 2023, 15:21
Но завернуть там трафик в его дефаултный роутер в Интернет никак не получается...
Можно на ретрансляторе, его Ethernet в LAN (и в роутер) навесить дополнительный адрес из сетки 192.168.0.0 чтобы совместить её с 192.168.1.0:

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

olej@Inspiron:~$ sudo ip address add 192.168.0.100/24 dev enp3s0

olej@Inspiron:~$ ip a dev enp3s0
Command "dev" is unknown, try "ip address help".
olej@Inspiron:~$ ip a s dev enp3s0
2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether b0:83:fe:b5:68:dc brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.5/16 brd 192.168.255.255 scope global dynamic noprefixroute enp3s0
       valid_lft 6967sec preferred_lft 6967sec
    inet 192.168.0.100/24 scope global enp3s0
       valid_lft forever preferred_lft forever
    inet6 fe80::4ab8:83aa:8297:970a/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
Но тогда через туннель ещё смешнее получается - там какие-то петли трафика образуются ... возможно через трафик Yggdrasil:

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

[olej@xenix ~]$ traceroute -i ipip6 192.168.1.3
traceroute to 192.168.1.3 (192.168.1.3), 30 hops max, 60 byte packets
 1  192.168.0.1 (192.168.0.1)  218.633 ms  218.907 ms  219.266 ms
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 6  * * *
 7  * * *
 8  * * *
 9  * * *
10  * * *
11  * * *
12  * * *
13  * * *
14  * * *
15  * * *
16  * * *
17  * * *
18  * * *
19  * * *
20  * * *
21  * * *
22  * * *
23  * * *
24  * * *
25  * * *
26  * * *
27  * * *
28  * * *
29  * * *
30  * * *

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

[olej@xenix ~]$ traceroute -i ipip6 192.168.1.1
traceroute to 192.168.1.1 (192.168.1.1), 30 hops max, 60 byte packets
 1  192.168.0.1 (192.168.0.1)  233.817 ms  233.808 ms  233.801 ms
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 6  * * *
 7  * * *
 8  * * *
 9  * * *
10  * * *
11  * * *
12  * * *
13  * * *
14  * * *
15  * * *
16  * * *
17  * * *
18  * * *
19  * * *
20  * * *
21  * * *
22  * * *
23  * * *
24  * * *
25  * * *
26  * * *
27  * * *
28  * * *
29  * * *
30  * * *

Ответить

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

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

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