UDP 패킷을 다른 IP의 VM으로 전달

UDP 패킷을 다른 IP의 VM으로 전달

저는 라우터를 통해 인터넷에 연결되어 있고 포트(예: 3000)에서 UDP 패킷을 KVM 내부의 VM으로 라우팅하려고 합니다.

┌──────────────────┐    
│ router           │
│ 54.0.0.1 (public)│
│ 192.168.0.1      │
└────────┬─────────┘
  ┌──────▼──────┐
  │ pc          │
  │ 192.168.0.2 │
  │ 10.0.0.1    │
  │ ┌────────┐  │
  │ │vm      │  │
  │ │10.0.0.2│  │
  │ └────────┘  │
  │             │
  └─────────────┘

내 라우터에서 포트 3000을 열고 모든 UDP 패킷을 192.168.0.2:3000으로 전달했으며 거기에서 다음을 추가했습니다.

sudo iptables -t nat -A PREROUTING -d 192.168.0.2 -p UDP --dport 3000 -j DNAT --to 10.0.0.2:3000

그러나 이것은 예상대로 작동하지 않습니다. 즉, 다음을 실행하면 의미합니다.

# on VM
$ nc -l -u -p 3000

# from another machine
$ nc 54.0.0.1 3000 -u -v

연결이 안되고 데이터 교환도 안되네요. 이 작업에 가장 가까운 것은 output무대를 갖는 것입니다.

sudo iptables -t nat -A OUTPUT -d 192.168.0.2 -p UDP --dport 3000 -j DNAT --to 10.0.0.2:3000

그리고 내가 nc 192.168.0.2 3000 -u -v계속 하면현지의VM에 연결하겠습니다. tcpdump외부 네트워크의 패킷이 실제로 전달된다는 것을 이미 확인할 수 있으므로 192.168.0.2:3000이것이 완전히 작동하지 않는 이유는 알 수 없습니다. (인터넷에서 VM까지)

답변1

당신은IPv4 전달 활성화PC에서? 거기서 멈춘다면 아마도 그 이유일 것입니다.

또한 iptables에는 OUTPUT 체인 규칙이 필요하지 않습니다. PREROUTING이면 충분합니다.

기본적으로 다음과 같이 단계를 복제했습니다.

┌──────────────────┐    
│ Another Machine  │
│ 192.168.146.129  │
└────────┬─────────┘
  ┌──────▼──────────┐
  │ pc              │
  │ 192.168.146.132 │
  │ 10.0.3.1        │
  │ ┌──────────┐    │
  │ │vm        │    │
  │ │10.0.3.100│    │
  │ └──────────┘    │
  │                 │
  └─────────────────┘

VM에서:

# Start listener
nc -l -u -p 3000

PC에서:

# Add Port Forwarding rule
sudo iptables -t nat -A PREROUTING -d 192.168.146.132 -p udp --dport 3000 -j DNAT --to-destination 10.0.3.100:3000

# Enable IPv4 forwarding
sudo sysctl -w net.ipv4.ip_forward=1

# Monitor traffic
sudo tcpdump -nni any udp port 3000

다른 컴퓨터에서:

# Connect
192.168.146.132 3000 -u -v

나에게는 잘 작동했습니다.

nc 192.168.146.132 3000 -u -v
192.168.146.132: inverse host lookup failed: Unknown host
(UNKNOWN) [192.168.146.132] 3000 (?) open
^C

관련 정보