Все ленты — последние статьи

Простой Ethernet-туннель на Linux в четыре-шесть команд из песочницы tutorial

 

Краткая шпаргалка:

HOST1: ip link add grelan type gretap local <IP1> remote <IP2> HOST1: ip link set grelan up HOST1: iptables -I INPUT -p gre -s <IP2> -j ACCEPT HOST2: ip link add grelan type gretap local <IP2> remote <IP1> HOST2: ip link set grelan up HOST2: iptables -I INPUT -p gre -s <IP1> -j ACCEPT 



Четыре команды на туннель и две на firewall (не нужны если трафик между своими серверми уже разрешен)
Это всё что нужно, дальше длинное объяснение с подробностями.


Когда требуется объединить несколько компьютеров в псевдолокальную сеть через интернет часто это решается настройкой OpenVPN.


Решение хорошо работает, но не лишено недостатков:
1. Нужно ставить дополнительный софт и его настраивать. Причем с первого раза настраивается он не очень просто — надо посидеть и поразбираться.
2. Шифрование трафика происходит в пользовательском режиме и вносит дополнительные задержки, это не всегда важно но для IP-телефонии может быть заметно.
3. Шифрование не всегда нужно. Например в моем случае все соединения и так защищенные (ssh), мне нужна просто удобная плоская адресация между несколькими компьютерами так как будто они объединены в локальную сеть.

В Linux GRE-туннели настраиваются до неприличия просто (если не нужно шифрование), из требований Linux и по публичному IP на каждый.
В интернете на эту тему информации как-то исчезающе мало — в основном объясняются IP (а не ethernet) туннели и сразу вкупе с шифрованием трафика (которое нужно не всегда). man ip тоже очень обширный и информацию по

Пусть у нас есть два хоста:
HOST1 с внешним адресом 1.2.3.4
HOST2 с внешним адресом 2.3.4.5

Хочется сделать между ними ethernet-сеть, ну и для примера поверх нее можно настроить IP-адреса 192.168.0.1 192.168.0.2, но можно и любые другие или IPv6 или что угодно еще — получится обычная сеть как через коммутатор.

Все команды выполняются от ROOT, после перезагрузки — теряются. Чтобы не терялись нужно прописать команды в скрипты автозагрузки или в конфиги (у каждого дистрибутива свои).

1. Добавить виртуальную сетевую карту-шлюз на HOST1:

HOST1: ip link add grelan type gretap local 1.2.3.4 remote 2.3.4.5 


На HOST1 он будет выглядеть как обычная сетевая карта — можно назначать IP-адреса, запускать DHCP-сервер, включать в Bridge и т.п.

2. Включить добавленную карту

ip link set grelan up 



2. Если запущен IP-tables — разрешаем GRE-трафик

HOST1: iptables -I INPUT -p gre -s 2.3.4.5 -j ACCEPT 



3. Симметричная настройка на втором хосте:

HOST2: ip link add grelan type gretap local 2.3.4.5 remote 1.2.3.4 HOST2: ip link set grelan up HOST2: iptables -I INPUT -p gre -s 1.2.3.4 -j ACCEPT 



В этот момент ethernet-сеть уже работает. Для проверки этого можно настроить приватные IP-адреса на каждой стороне туннеля и пустить пинги.

HOST1: ip addr add 192.168.0.1/24 HOST2: ip addr add 192.168.0.2/24 



можно пинговать.

root@ubuntu:~



Для пингов возможно тоже придется добавить правила в iptables (или вообще выключить его на время экспериментов).

Туннель спокойно настраивается между разными версиями linux, пока писал этот пост один конец был на ubuntu, второй на centos, разницы в настройке нет абсолютно никакой.

Повторяю — это туннель не дает никакой защиты от прослушивания/внедрения трафика.