通过与进入时相同的接口返回流量

通过与进入时相同的接口返回流量

我在我的 Linux 服务器 (VPS、OpenVZ) 上创建了一个 GRE 隧道。服务器从此隧道获取一个公共 IP 地址,我需要通过它从 Internet 访问它。

已有一个默认网关,位于托管提供商的网络上。我无法更改或删除它,否则将无法访问服务器。

使用 MikroTik 路由器,我会在 GRE 隧道(INPUT 链)上标记传入连接,然后为标记的连接设置路由标记。稍后,我只需将路由标记的路由添加到 0.0.0.0/0,网关为隧道另一端的 IP 地址。

但是,在 Linux 上使用 iptables 和 iproute2 无法获得相同的行为。根据 Server Fault 上的其他问题,我已经这样做了:

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(示例地址)。

出了什么问题?为什么不工作?我可以从远程隧道端 ping 服务器,反之亦然,但无法从 Internet (network-tools.com) ping 隧道上的服务器 IP 地址。我的 ISP 正确地将 GRE 隧道中使用的公共 IP 地址块路由给我。

那又怎么样?

提前谢谢您。再见。

编辑:根据要求,以下是一些命令的输出:

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 更改为 EoIP 后,我将表重命名gre_route为。eoip_rb

ip route show table eoip_rb

default via 198.51.100.53 dev zeoip0

zeoip0是 EoIP 接口(MikroTik 专有,通过 GRE 工作)。我已更改为 EoIP 来测试这是否是我路由器上的 ARP 表的问题(GRE 没有 ARP,而 EoIP 有),但出现了同样的问题。

相关内容