GRE IP에서 VM으로(Proxmox) - 전체 경로를 표시하는 Traceroute

GRE IP에서 VM으로(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/인터페이스(헤츠너)

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를 사용하여 VM을 추적하면 다음과 같은 결과가 나타납니다.

  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 주소를 VM 주소로 사용하고 싶지 않습니다. 가능하다면 VM의 구성을 다음과 같이 유지하고 싶습니다.

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에 대한 라우터 역할을 하면 ICMP가 생성됩니다.전송 중 TTL이 만료되었습니다.라우팅 테이블에서 가장 적절한 주소를 선택합니다. 기본적으로 관련 인터페이스( )에서 기본 IP 주소를 선택 gre1하지만 해당 인터페이스에 설정된 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

제어 마크커널 생성 IPv4 응답 패킷TCP RST 또는 ICMP 에코 응답과 같은 소켓과 연결되지 않습니다. 설정되지 않은 경우 이러한 패킷의 fwmark는 0입니다. 설정된 경우 응답하는 패킷의 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

헤츠너의 IP 주소는 더 이상 공개되지 않습니다.

관련 정보