How to Wiki Database (change log)
http://[222:a8e4:50cd:55c:788e:b0a5:4e2f:a92c]
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
135 lines
9.3 KiB
135 lines
9.3 KiB
10 months ago
|
====== GRE-туннель ======
|
||
|
|
||
|
GRE (Generic Routing Encapsulation) - это один из простейших протоколов туннелирования, представляющий собой соединение узлов по принципу точка - точка.
|
||
|
|
||
|
Туннелирование - это, по сути, упаковка наших данных (например, протокол IP) в определенный пакет, который передаётся от узла-отправителя к узлу-получателю. На узле-получателе пакет распаковывается и изначальные данные продолжают свой путь.
|
||
|
|
||
|
GRE в чистом виде никак не защищен, нет никакого шифрования данных в пакете, и за счет этого данные в GRE-туннелях передаются с минимальными потерями в скорости и минимальным увеличением объема передаваемых данных.
|
||
|
|
||
|
Часто GRE используется совместно с протоколами защиты сетевого трафика, например IPSec. И это по сути представляет собой практически полноценное решение для организации виртуальных частных сетей (VPN).
|
||
|
|
||
|
Используя чистый GRE внутри [[..:yggdrasil]] можно с различными целями легко строить туннели, аналогичные привычным VPN. Защита тахих туннелей будет обеспечена самим [[..:yggdrasil]], трафик в котором шифруется по-умолчанию.
|
||
|
|
||
|
Например, с помощью GRE туннеля внутри Yggdrasil можно настроить на удаленной машине шлюз в интернет. Т.е., вы на своей домашней машине с помощью Yggdrasil можете соединяться с удаленным сервером, который будет маршрутизировать ваши данные, упакованные GRE в интернет, и c точки зрения использования всё это будет происходить аналогично тому, как это происходит при установке OpenVPN-соединения или L2TP/IPSec.
|
||
|
|
||
|
Команды для создания GRE-туннеля можно вводить вручную, можно написать bash-скрипт, либо можно использовать /etc/network/interfaces (либо юнит systemd) для поднятия туннелей автоматически при загрузке системы.
|
||
|
|
||
|
Для примера:
|
||
|
<code>
|
||
|
#какие туннели уже есть в системе (если ранее не создавали, вывод команды будет пуст)
|
||
|
ip tunnel show
|
||
|
ip -6 tunnel show
|
||
|
|
||
|
#какие интерфейсы есть в системе
|
||
|
ifconfig -a
|
||
|
|
||
|
#создание туннеля
|
||
|
sudo ip tunnel add tun1 mode ip6gre remote 0200:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx local 0203:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx dev tun0
|
||
|
|
||
|
#активация туннеля
|
||
|
sudo ip link set tun1 up
|
||
|
|
||
|
#назначение адреса
|
||
|
sudo ip link set dev tun1 address xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx
|
||
|
|
||
|
#уничтожение туннеля
|
||
|
sudo ip link set tun1 down
|
||
|
sudo ip tunnel del tun1
|
||
|
</code>
|
||
|
|
||
|
Пример с gretap (второй уровень OSI):
|
||
|
<code>
|
||
|
sudo ip link add yggvpn0 type ip6gretap local 0200:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx remote 0203:xxxx:xxxx:xxxx:xxxx:xxxx:xxx:xxxx key 1
|
||
|
sudo ip link set dev yggvpn0 address xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx
|
||
|
#удаление
|
||
|
sudo ip link del dev yggvpn0
|
||
|
</code>
|
||
|
|
||
|
Не забывайте открывать доступ по протоколу GRE в iptables.
|
||
|
Интерфейс GRE можно назначить шлюзом по-умолчанию - работа будет аналогичной VPN.
|
||
|
|
||
|
===== Практический пример: GRE-туннель IPv4 over IPv6 =====
|
||
|
|
||
|
Имеем две машины: t1 и t2, соединенные посредством Yggdrasil.
|
||
|
|
||
|
^ ^ t1 ^ t2 ^
|
||
|
| Yggdrasil IPv6 | 204:f52f:7bb4:c8c2:21f9:6972:14f5:32fd | 200:862d:85a4:6b85:4fc1:55a3:fa3:7b0e |
|
||
|
| Доступ в интернет | Есть | Нет |
|
||
|
|
||
|
Создадим GRE-туннель и "пробросим" через него доступ в интернет для машины t2. Машины "в туннеле" будут иметь IPv4-адреса. Для доступа в интернет с t2 будем использовать NAT.
|
||
|
|
||
|
==== Действия на t1 ====
|
||
|
|
||
|
Во-первых, задействуем форвардинг пакетов для того, чтобы обеспечить доступ в интернет со второй машины:
|
||
|
|
||
|
<code>
|
||
|
sysctl -w net.ipv4.ip_forward=1
|
||
|
sysctl -w net.ipv6.conf.all.forwarding=1
|
||
|
</code>
|
||
|
|
||
|
Чтобы эти настройки сохранились после перезагрузки в файле %%/etc/sysctl.conf%% раскомментируем:
|
||
|
<code>net.ipv4.ip_forward=1
|
||
|
net.ipv6.conf.all.forwarding=1</code>
|
||
|
|
||
|
Непосредственно, создание туннеля:
|
||
|
|
||
|
<code>
|
||
|
#создаем туннель
|
||
|
ip tunnel add tun1 mode ip6gre remote 0200:862d:85a4:6b85:4fc1:55a3:fa3:7b0e local 0204:f52f:7bb4:c8c2:21f9:6972:14f5:32fd dev tun0
|
||
|
|
||
|
#присваиваем IPv4-адрес на интерфейс туннеля и сразу добавляем маршрут ко второму концу (10.1.1.2) через этот интерфейс
|
||
|
ip addr add dev tun1 local 10.1.1.1 remote 10.1.1.2 #t1 будет иметь адрес 10.1.1.1, t2 - 10.1.1.2.
|
||
|
|
||
|
#поднимаем туннель
|
||
|
ip link set tun1 up
|
||
|
</code>
|
||
|
|
||
|
NAT c помощью iptables:
|
||
|
|
||
|
<code>
|
||
|
iptables -A FORWARD -i tun1 -j ACCEPT
|
||
|
iptables -A FORWARD -o tun1 -j ACCEPT
|
||
|
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
|
||
|
ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
|
||
|
</code>
|
||
|
|
||
|
==== Действия на t2 ====
|
||
|
|
||
|
Симметричные действия для поднятия туннеля:
|
||
|
|
||
|
<code>ip tunnel add tun1 mode ip6gre remote 0204:f52f:7bb4:c8c2:21f9:6972:14f5:32fd local 0200:862d:85a4:6b85:4fc1:55a3:fa3:7b0e dev tun0
|
||
|
ip addr add dev tun1 local 10.1.1.2 remote 10.1.1.1
|
||
|
ip link set tun1 up</code>
|
||
|
|
||
|
Добавим маршрут по умолчанию для доступа в интернет:
|
||
|
<code>route add default gw 10.1.1.1</code>
|
||
|
|
||
|
//**Примечание:** если на t2 доступ в интернет уже есть и Yggdrasil на t2 подключен к публичным пирам, а вы просто настраиваете VPN c использованием Yggdrasil, необходимо будет прописать муршрут к пирам в обход туннеля, иначе соединение с ними прервётся. Пример добавления маршрута до публичного пира, в обход туннеля: ''%%sudo ip route add 62.210.85.80/32 via 192.168.1.1 dev wlo1%%''; 62.210.85.80 - адрес публичного пира, 192.168.1.1 - адрес шлюза в интернет (домашнего роутера), wlo1 - имя интерфейса, через который подключаетесь к шлюзу.//
|
||
|
|
||
|
В /etc/resolv.conf можно прописать DNS-сервер:
|
||
|
<code>nameserver 8.8.8.8
|
||
|
</code>
|
||
|
|
||
|
На обеих машинах в iptables разрешаем GRE, если оно запрещено:
|
||
|
|
||
|
<code>
|
||
|
ip6tables -I INPUT -p gre -j ACCEPT
|
||
|
</code>
|
||
|
|
||
|
Вот, собственно, и всё.
|
||
|
|
||
|
Получили почти классическую схему VPN-сервера (в роли которого выступает t2) для доступа к ошибочно заблокированным РКН сайтам.
|
||
|
|
||
|
Кроме того, так можно обеспечить выход в интернет устройства, подключенного к Yggdrasil, например, с помощью [[yggdrasil:mesh_setup|802.11s (Wi-Fi Mesh)]].
|
||
|
|
||
|
А еще, такой туннель можно использовать для коммуникации приложений, которые не поддерживают IPv6, если вы соединены только через Yggdrasil.
|
||
|
|
||
|
//**Примечание:** читайте так же о настройке IPIP-туннеля через Yggdrasil: [[yggdrasil:tunnels:ipip-tunnel]].//
|
||
|
|
||
|
====== Ссылки ======
|
||
|
АйТи бубен: GRE https://wiki.dieg.info/gre\\
|
||
|
Сети для самых маленьких. Часть седьмая. VPN https://habr.com/ru/post/170895/\\
|
||
|
Linux Advanced Routing & Traffic Control HOWTO. Глава 5. GRE и другие тоннели https://docstore.mik.ua/manuals/ru/LARTC/x418.html\\
|
||
|
Знакомство с виртуальными интерфейсами Linux: туннели https://temofeev.ru/info/articles/znakomstvo-s-virtualnymi-interfeysami-linux-tunneli/\\
|
||
|
Простой Ethernet-туннель на Linux в четыре-шесть команд https://habr.com/ru/post/227859/\\
|