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

Краткая шпаргалка: HOST1: ip link add gretap type grelan local remote HOST1: ifconfig grelan up HOST1: iptables -I INPUT -p gre -s -j ACCEPT HOST2: ip link add gretap type grelan local remote HOST2: ifconfig grelan up HOST2: iptables -I INPUT -p gre -s -j ACCEPT Четыре команды на туннель и две на firewall (не нужны если трафик между своими серверми уже разрешен)Это всё что нужно, дальше длинное объяснение с подробностями.

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

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

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

Пусть у нас есть два хоста: HOST1 с внешним адресом 1.2.3.4HOST2 с внешним адресом 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. Включить добавленную карту

ifconfig 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: ifconfig 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:~# ping 192.168.0.1 PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data. 64 bytes from 192.168.0.1: icmp_req=1 ttl=64 time=2.45 ms 64 bytes from 192.168.0.1: icmp_req=2 ttl=64 time=1.19 ms 64 bytes from 192.168.0.1: icmp_req=3 ttl=64 time=2.45 ms Для пингов возможно тоже придется добавить правила в iptables (или вообще выключить его на время экспериментов).

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

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

© Habrahabr.ru