DNAT를 하나의 공용 IP로만 제한하는 방법은 무엇입니까?

DNAT를 하나의 공용 IP로만 제한하는 방법은 무엇입니까?

하이퍼바이저에서여러 공개 IP안에단일 네트워크 인터페이스, 두 세트의 가상 머신이 있습니다.

  • 그룹 A 구성원의 공용 IP는 호스트 인터페이스를 통해(라우팅이 설정된 브리지를 통해) 해당 구성원에게 직접 라우팅됩니다. [1]
  • 그룹 B의 구성원은 NAT가 구성된 브리지에 있으므로 개인 IP를 얻고 해당 연결은 특정 공용 IP를 통해 NAT됩니다. 우리는 이것을 공유 주소라고 부릅니다 IPb. [2]

특정 포트 에서 들어오는 연결은 IPb특정 그룹 B 구성원에게 전달됩니다. 내가 겪고 있는 문제는 DNAT(포트 전달) 규칙이 를 통해 들어오는 패킷뿐만 아니라 IPb다른 공용 IP에서 들어오는 패킷에도 적용된다는 것입니다.

DNAT 규칙을 으로 전달되는 패킷으로만 제한하려면 어떻게 해야 합니까 IPb?

나는 노력했다-dstIPb하지만 이로 인해 PREROUTING실제로는 규칙이 전혀 트리거되지 않습니다(포트 전달이 중지됨). [삼]

감사해요

[1]
auto eth0
iface eth0 inet static
        address <eth0-main-ip>/32
        gateway <gateway-ip>
        pointopoint <gateway-ip>

#GroupA Bridge:
auto vmbr12
iface vmbr12 inet static
        address <eth0-main-ip>/32
        bridge-ports none
        bridge-stp off
        bridge-fd 0
        up   ip route add <Public-IPa>/32 via <eth0-main-ip> dev vmbr12
        down ip route del <Public-IPa>/32 via <eth0-main-ip> dev vmbr12
        .
        .
        .
[2]
#GroupB Bridge:
auto vmbr4
iface vmbr4 inet static
        address 10.0.0.1/16
        bridge-ports none
        bridge-stp off
        bridge-fd 0
        post-up echo 1 > /proc/sys/net/ipv4/ip_forward

        post-up iptables -t nat -A POSTROUTING -s '10.0.0.0/16' -o eth0 -j MASQUERADE
        post-up iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 22 -j DNAT --to 10.0.101.1:22
        post-up iptables -A FORWARD -p tcp -d 10.0.101.1 --dport 22 -j ACCEPT

        post-down iptables -t nat -D POSTROUTING -s '10.0.0.0/16' -o eth0 -j MASQUERADE
        post-down iptables -D PREROUTING -t nat -i eth0 -p tcp --dport 22 -j DNAT --to 10.0.101.1:22
        post-down iptables -D FORWARD -p tcp -d 10.0.101.1 --dport 22 -j ACCEPT

        .
        .
        .
[3]
#Using IPb in PREROUTING rule
<snip>
        post-up iptables -t nat -A POSTROUTING -s '10.0.0.0/16' -o eth0 -j MASQUERADE
        post-up iptables -A PREROUTING -t nat -i eth0 -p tcp -dst IPb --dport 22 -j DNAT --to 10.0.101.1:22
        post-up iptables -A FORWARD -p tcp -d 10.0.101.1 --dport 22 -j ACCEPT
        post-down iptables -t nat -D POSTROUTING -s '10.0.0.0/16' -o eth0 -j MASQUERADE
        post-down iptables -D PREROUTING -t nat -i eth0 -p tcp -dst IPb --dport 22 -j DNAT --to 10.0.101.1:22
        post-down iptables -D FORWARD -p tcp -d 10.0.101.1 --dport 22 -j ACCEPT
</snip>

답변1

PREROUTING 규칙에서 -dst IPb를 시도했지만 이로 인해 실제로 규칙이 전혀 트리거되지 않았습니다(포트 전달이 중지됨). [삼]

그러나 이것이 올바른 접근 방식임이 밝혀졌습니다.IPb ~ 해야 하다서브넷 길이를 포함합니다. 이 경우에는 방금 사용했는데 IPb/32예상대로 작동했습니다.

관련 정보