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
,如下所示有记录的:
src
ADDRESS
发送到路由前缀覆盖的目的地时首选的源地址。
因此将表 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 地址不会再被泄露。