Создание Gre-туннеля в openwrt.

Чтобы создать gre-туннель, можно использовать стандартные утилиты linux. Для примера, есть два устройства. Устройство А с локальным ip-адресом 192.168.1.100 и устройство Б с локальным ip-адресом 192.168.1.101.

На устройстве А выполняем последовательность команд для создания gre-туннеля в openwrt:

ip tunnel add hosta mode gre remote 192.168.1.101 local 192.168.1.100 ttl 255
ip link set hosta up
ip addr add 10.0.1.1/24 dev hosta

На устройстве Б выполняем последовательность команд для создания gre-туннеля:

ip tunnel add hostb mode gre remote 192.168.1.100 local 192.168.1.101 ttl 255
ip link set hostb up
ip addr add 10.0.1.2/24 dev hostb

Смотрим вывод ifconfig:

# ifconfig hostb
hostb     Link encap:UNSPEC  HWaddr C0-A8-01-65-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:10.0.1.2  P-t-P:10.0.1.2  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP  MTU:1476  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Gre-интерфейс создан. Проверяем работоспособность gre-туннеля в openwrt:

# ping 10.0.1.1
PING 10.0.1.1 (10.0.1.1) 56(84) bytes of data.
64 bytes from 10.0.1.1: icmp_req=1 ttl=64 time=0.246 ms
64 bytes from 10.0.1.1: icmp_req=2 ttl=64 time=0.229 ms
64 bytes from 10.0.1.1: icmp_req=3 ttl=64 time=0.208 ms

Создание ipip-туннеля в openwrt.
На устройстве А выполняем последовательность команд для создания ipip туннеля в openwrt:

ip tunnel add ipipA mode ipip remote 192.168.1.101 local 192.168.1.100
ip link set ipipA up
ip addr add 10.0.1.1/24 dev ipipA

На устройстве Б выполняем последовательность команд для создания ipip туннеля:

ip tunnel add ipipB mode ipip remote 192.168.1.100 local 192.168.1.101
ip link set ipipB up
ip addr add 10.0.1.2/24 dev ipipB

Смотрим вывод ifconfig:

# ifconfig ipipB
ipipB     Link encap:UNSPEC  HWaddr C0-A8-01-65-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:10.0.1.2  P-t-P:10.0.1.2  Mask:255.255.255.0
          UP POINTOPOINT RUNNING NOARP  MTU:1480  Metric:1
          RX packets:3 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:252 (252.0 B)  TX bytes:192 (192.0 B)

Ipip-интерфейс создан. Проверяем работоспособность ipip-туннеля в openwrt:

# ping 10.0.1.1
PING 10.0.1.1 (10.0.1.1) 56(84) bytes of data.
64 bytes from 10.0.1.1: icmp_req=1 ttl=64 time=0.288 ms
64 bytes from 10.0.1.1: icmp_req=2 ttl=64 time=0.230 ms
64 bytes from 10.0.1.1: icmp_req=3 ttl=64 time=0.228 ms

В openwrt можно создать gre-туннель стандартным методом через редактирование
файла /etc/config/network

Для этого нужно установить пакеты: gre, kmod-gre

Далее на устройстве А в файл добавляем секцию с настройкой gre-туннеля:

config interface hosta                 
        option proto    gre            
        option zone     tunnels                                
        option peeraddr 192.168.1.101
        option tunlink 'eth0'
                                                            
config interface hosta_addr                                                      
        option proto    static                                     
        option ifname   @hosta                             
        option ipaddr   10.0.1.1                       
        option netmask  255.255.255.0

На устройстве Б в файл добавляем аналогичную секцию с настройкой gre-туннеля:

config interface hostb                 
        option proto    gre            
        option zone     tunnels                                
        option peeraddr 192.168.1.100
        option tunlink 'eth0'
                                                            
config interface hostb_addr                                                      
        option proto    static                                     
        option ifname   @hostb 
        option ipaddr   10.0.1.2                       
        option netmask  255.255.255.0

Перезагружаемся и смотрим вывод команды ifconfig:

# ifconfig gre-hostb
gre-hostb Link encap:UNSPEC  HWaddr C0-A8-01-65-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:10.0.1.2  P-t-P:10.0.1.2  Mask:255.255.255.0
          UP POINTOPOINT RUNNING NOARP  MTU:1280  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

Gre-интерфейс успешно создался.

Проверим работоспособность gre-туннеля в openwrt:

# ping 10.0.1.1
PING 10.0.1.1 (10.0.1.1) 56(84) bytes of data.
64 bytes from 10.0.1.1: icmp_req=1 ttl=64 time=0.243 ms
64 bytes from 10.0.1.1: icmp_req=2 ttl=64 time=0.214 ms
64 bytes from 10.0.1.1: icmp_req=3 ttl=64 time=0.197 ms