Я новичок в сетевых технологиях, поэтому прошу прощения за терминологические ошибки.
У меня есть 2 сервера, подключенные к туннелю GRE.
Сервер1 (10.0.0.1) ----> Сервер2 (10.0.0.2)
Я хочу иметь возможность подключаться к общедоступным IP-адресам на Server2 с помощью Server1. Для этого я настраиваю виртуальные интерфейсы с общедоступными IP-адресами Server2 на Server1, а затем использую правила маршрутизации на Server1 для маршрутизации пакетов через туннель GRE.
На Server1:
ip rule add from [Server2's first public IP] table gre
ip rule add from [Server2's second public IP] table gre
ip route add default via 10.0.0.2 dev gre1 table gre
Это отлично работает, и я могу видеть пакеты, поступающие через GRE на Server2. Я вижу, как пакет выходит из туннеля на устройстве gre1 Server2, как показано:
С Server1: ping -I [Server2's public ip] google.com
tcpdump с туннельного устройства GRE Server2:
12:07:17.029160 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 84)
[Server2's public ip] > 74.125.225.38: ICMP echo request, id 6378, seq 50, length 64
Это именно тот пакет, который мне нужен. Однако я не вижу, чтобы он вообще выходил на eth0: 0 (где привязан публичный IP-адрес Server2).
Я пытался использовать правила маршрутизации, чтобы пакеты, приходящие с общедоступного IP-адреса Server2 (который исходил из dev gre1), проходили через dev eth0 на общедоступном шлюзе по умолчанию, и это тоже не работает.
Я в растерянности, спасибо всем, кто может помочь.