하이퍼바이저에서여러 공개 IP안에단일 네트워크 인터페이스, 두 세트의 가상 머신이 있습니다.
- 그룹 A 구성원의 공용 IP는 호스트 인터페이스를 통해(라우팅이 설정된 브리지를 통해) 해당 구성원에게 직접 라우팅됩니다. [1]
- 그룹 B의 구성원은 NAT가 구성된 브리지에 있으므로 개인 IP를 얻고 해당 연결은 특정 공용 IP를 통해 NAT됩니다. 우리는 이것을 공유 주소라고 부릅니다
IPb
. [2]
특정 포트 에서 들어오는 연결은 IPb
특정 그룹 B 구성원에게 전달됩니다. 내가 겪고 있는 문제는 DNAT(포트 전달) 규칙이 를 통해 들어오는 패킷뿐만 아니라 IPb
다른 공용 IP에서 들어오는 패킷에도 적용된다는 것입니다.
DNAT 규칙을 으로 전달되는 패킷으로만 제한하려면 어떻게 해야 합니까 IPb
?
나는 노력했다-dst
IPb
하지만 이로 인해 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
예상대로 작동했습니다.