Networking

GRE IP 到虛擬機 (Proxmox) - Traceroute 顯示完整路由

  • April 27, 2022

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

IP 地址 88.198.49.xxx 和 164.132.xxx.1 代表同一個系統:在 Hetzner 充當路由器的管理程序。

所以當目標是這個系統本身時,它會回复它所聯繫的地址:164.132.xxx.1。當它作為 164.132.xxx.2 的路由器時,它將生成一個*在傳輸中過期的 ICMP TTL,*並從其路由表中選擇最合適的地址。gre1預設情況下,它會選擇相關介面(沒關係)。

通常為了改變這種行為,人們會用一個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 出現問題。也不好。

我能找到的最簡單的方法是標記通過gre1到達的數據包,並且為了避免使用任何繁重的conntrack功能,請改用全域fwmark_reflectsysctl 切換:

fwmark_reflect - BOOLEAN

控制核心生成的與套接字無關的 IPv4 回複數據包的 fwmark,例如 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 地址不會再洩露。

引用自:https://unix.stackexchange.com/questions/700505