Назад | Перейти на главную страницу

Возврат трафика через тот же интерфейс, что и введенный

Я создал туннель GRE на своем Linux-сервере (VPS, OpenVZ). Сервер получает публичный IP-адрес из этого туннеля, и мне нужно, чтобы он был доступен из Интернета через него.

Уже есть шлюз по умолчанию, который находится в сети хостинг-провайдера. Я не могу изменить или удалить его, иначе я потеряю доступ к серверу.

Используя маршрутизатор MikroTik, я бы отмечал входящие соединения в туннеле GRE (цепочка INPUT), а затем устанавливал метку маршрутизации для отмеченных соединений. Позже я просто добавлю маршрут для метки маршрутизации в 0.0.0.0/0, где шлюз будет IP-адресом другого конца туннеля.

Однако я не могу добиться такого же поведения при использовании iptables и iproute2 в Linux. Это то, что я уже сделал, основываясь на других вопросах здесь, о сбое сервера:

iptables -t mangle -A INPUT -j CONNMARK --restore-mark
iptables -t mangle -A INPUT -i gre1 -j MARK --set-mark 100
iptables -t mangle -A INPUT -j CONNMARK --save-mark
iptables -t mangle -A OUTPUT -j CONNMARK --restore-mark

ip rule add from all fwmark 100 lookup gre_route
ip route add default via 198.51.100.53 table gre_route

gre_route таблица была правильно создана в / etc / iproute2 / rt_tables.

gre1это интерфейс туннеля GRE. IP-адрес сервера 198.51.100.54, а другой конец имеет IP 198.51.100.53 (пример адреса).

В чем дело? Почему не работает? Я могу пинговать сервер с удаленного конца туннеля и наоборот, но не могу пинговать IP-адрес сервера по туннелю из Интернета (network-tools.com). Блок публичных IP-адресов, используемый в туннеле GRE, правильно маршрутизируется мне моим интернет-провайдером.

Что насчет этого?

Заранее спасибо. До свидания.

Изменить: по запросу, вот результат некоторых команд:

ip link show:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN mode DEFAULT 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: venet0: <BROADCAST,POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT 
    link/void 
3: gre0: <NOARP> mtu 1476 qdisc noop state DOWN mode DEFAULT 
    link/gre 0.0.0.0 brd 0.0.0.0
4: gretap0: <BROADCAST,MULTICAST> mtu 1476 qdisc noop state DOWN mode DEFAULT qlen 1000
    link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
5: zeoip0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN mode DEFAULT qlen 500
    link/ether ab:cd:ef:12:34:56 brd ff:ff:ff:ff:ff:ff

ip route show:

198.51.100.52/30 dev zeoip0  proto kernel  scope link  src 198.51.100.54 
169.254.0.0/16 dev venet0  scope link  metric 1002 
default dev venet0  scope link

ip rule show:

0:  from all lookup local 
32765:  from all fwmark 0xbcb lookup eoip_rb 
32766:  from all lookup main 
32767:  from all lookup default

Я переименовал стол gre_route к eoip_rb после изменил с чистого GRE на EoIP.

ip route show table eoip_rb:

default via 198.51.100.53 dev zeoip0

zeoip0 представляет собой интерфейс EoIP (проприетарный MikroTik, работает через GRE). Я перешел на EoIP, чтобы проверить, была ли проблема с таблицами ARP на моем маршрутизаторе (GRE не имеет ARP, EoIP имеет), но возникает та же проблема.