我有一个 Linux 主机和几个路由器板。我创建了一个 GRE 隧道,但 Linux 不回答keepalive包。然后路由器将 gre 连接标记为不可达,所以我无法从路由器子网发送到 Linux 主机。如果 linux 将某些东西发送到隧道(ping 等) - RouterOS 将连接标记为可达。第二个和下一个包裹很好地路由,直到一分钟空闲(没有流量)。
linux中的隧道以这种方式制作:
remote=x.x.x.x
dev=gre21
network=10.21.0.0/16
ip tunnel add ${dev} mode gre remote ${remote} ttl 255
ip addr add 172.16.1.1/24 peer 172.16.1.21 dev ${dev}
ip link set ${dev} up
ip route add ${network} dev ${dev}
并且 ip l
:
14: gre21: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1476 qdisc noqueue state UNKNOWN
link/gre 0.0.0.0 peer 109.60.170.15
如何设置状态“运行”?
如何让隧道保持活力?在cron中ping?
这并不完全是对 GRE 隧道 keepalive 的直接回答,但是您可能会发现在 linux 服务器上使用 MikroTik EoIP 选项更容易,因为它已被移植并允许隧道 ID 和 keepalive 以类似的方式(也处理任何碎片尺寸链接)。
https://code.google.com/p/linux-eoip/
crontab -e
*/1 * * * * ping -c 69
它对我来说很简单,保持活跃。
答案为时已晚,但您可能想要这个: https ://github.com/Jamesits/linux-gre-keepalive
如果您对设置有
accept_local
帮助的原因感兴趣,这里有一个答案: https ://bv2ex.com/t/588215GRE Keepalive 是封装在“路由器到主机”GRE 数据包中的“主机到路由器”GRE 数据包。这个想法是主机(在这种情况下是 Linux)接收数据包,看到数据包实际上是路由器的 GRE 数据包,然后将其发回。路由器接收到这个数据包并且知道远端仍在响应。
Linux FIB 代码是这样的,如果它接收到源是本地单播地址的流量,则该流量被认为是无效的。
观察以下代码: