GRE IP 到虚拟机 (Proxmox) - 显示完整路由的 Traceroute

GRE IP 到虚拟机 (Proxmox) - 显示完整路由的 Traceroute

88.198.49.xxx= Hetzner(将在其上运行虚拟机)

141.94.176.xxx= OVH(包含下面的块)

164.132.xxx.0/28= 在 Hetzner 上用作虚拟机的 IP 块

为了设置 GRE,我运行了以下命令:

OVH:

ip tunnel add gre1 mode gre remote 88.198.49.xxx local 141.94.176.xxx ttl 255
ip link set gre1 up
ip route add 164.132.xxx.0/28 dev gre1
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

赫茨纳:

ip tunnel add gre1 mode gre remote 141.94.176.xxx local 88.198.49.xxx ttl 255
ip link set gre1 up
ip rule add from 164.132.xxx.0/28 table 666
ip route add default dev gre1 table 666
ip route add 164.132.xxx.0/28 dev vmbr0 table 666
iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

/etc/network/interfaces (Hetzner)

auto vmbr0
iface vmbr0 inet static
        address 164.132.xxx.1/28
        bridge-ports none
        bridge-stp off
        bridge-fd 0

当我跟踪路由 164.132.xxx.1 时,效果很好,不显示 Hetzner IP

  7     1 ms     1 ms     1 ms  10.95.34.50
  8     2 ms     2 ms     2 ms  10.73.1.135
  9     2 ms     2 ms     2 ms  10.72.66.67
 10     2 ms     2 ms     2 ms  10.164.42.155
 11     1 ms     1 ms     1 ms  xxxxxx [141.94.176.xxx]
 12    17 ms    17 ms    17 ms  xxxxxx [164.132.xxx.1]

但是,当我使用 164.132.xxx.2 跟踪虚拟机时,我得到以下结果

  7     1 ms     1 ms     1 ms  10.95.34.32
  8     2 ms     2 ms     2 ms  10.73.1.45
  9     2 ms     2 ms     2 ms  10.72.66.67
 10     2 ms     2 ms     1 ms  10.164.42.163
 11     1 ms     1 ms     1 ms  xxxxxx [141.94.176.xxx]
 12    14 ms    14 ms    14 ms  xxxxxx [88.198.49.xxx]
 13    15 ms    15 ms    15 ms  xxxxxx [164.132.xxx.2]

如何隐藏它以便不显示 88.198.49.xxx?我相信这可以通过 NAT 来完成,但我不想使用 NAT 地址作为虚拟机地址。如果可能的话,我想保留虚拟机的配置如下。

IP: 164.132.xxx.2/28
Gateway: 164.132.xxx.1

答案1

IP 地址 88.198.49.xxx 和 164.132.xxx.1 代表同一个系统:充当 Hetzner 路由器的虚拟机管理程序。

因此,当目标是该系统本身时,它将回复其所联系的地址:164.132.xxx.1。当它充当 164.132.xxx.2 的路由器时,它将生成 ICMPTTL 在传输过程中过期并将从其路由表中选择最合适的地址。默认情况下,它会选择相关接口 ( gre1) 上的主 IP 地址,但由于该接口没有设置 IP 地址,因此它将遵循某种算法并获取 88.198.49.xxx(可能是因为它是本地隧道端点地址?没关系)。

通常要改变这种行为,可以用一个提示来提示路线src,如下所示有记录的

srcADDRESS

发送到路由前缀覆盖的目的地时首选的源地址。

因此将表 666 中的默认路由替换为:

ip route add default dev gre1 table 666

到:

ip route add default dev gre1 src 164.132.xxx.1 table 666

会起作用...除了表 666 不会被使用发射一包。添加ip rule iif gre1 table 666也不会用于发射,也不ip rule add oif gre1 table 666用于发射时绑定到接口

因此,这需要主路由表中的全局行为,但是当属于 OVH 的 IP 地址被泄露并检测到时,这可能会导致 Hetzner 出现问题。也不好。

我能找到的最简单的方法是标记通过格雷1并且,避免使用任何重型连线功能,使用全局fwmark_reflect系统控制切换:

fwmark_reflect - BOOLEAN

控制 fwmark内核生成的 IPv4 回复数据包不与套接字关联,例如 TCP RST 或 ICMP 回显回复)。如果未设置,这些数据包的 fwmark 为零。如果设置,它们将具有它们正在回复的数据包的 fwmark。

由于此事件仍然发生在路由决策步骤中,因此必须在路由发生之前设置标记。

所以除了src 164.132.xxx.1上面的改变之外,还要做:

iptables -t mangle -A PREROUTING -i gre1 -j MARK --set-mark 666
ip rule add fwmark 666 lookup 666
sysctl -w net.ipv4.fwmark_reflect=1

Hetzner 的 IP 地址不会再被泄露。

相关内容