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
IP 地址 88.198.49.xxx 和 164.132.xxx.1 代表同一個系統:在 Hetzner 充當路由器的管理程序。
所以當目標是這個系統本身時,它會回复它所聯繫的地址:164.132.xxx.1。當它作為 164.132.xxx.2 的路由器時,它將生成一個*在傳輸中過期的 ICMP TTL,*並從其路由表中選擇最合適的地址。
gre1
預設情況下,它會選擇相關介面(沒關係)。通常為了改變這種行為,人們會用一個
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 出現問題。也不好。
我能找到的最簡單的方法是標記通過gre1到達的數據包,並且為了避免使用任何繁重的conntrack功能,請改用全域
fwmark_reflect
sysctl 切換:
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 地址不會再洩露。