Я создал туннель 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 имеет), но возникает та же проблема.