Краткая шпаргалка:
HOST1: ip link add gretap type grelan local <IP1> remote <IP2>
HOST1: ifconfig grelan up
HOST1: iptables -I INPUT -p gre -s <IP2> -j ACCEPT
HOST2: ip link add gretap type grelan local <IP2> remote <IP1>
HOST2: ifconfig 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. Включить добавленную карту
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, разницы в настройке нет абсолютно никакой.
Повторяю — это туннель не дает никакой защиты от прослушивания/внедрения трафика.
Автор: rekby