내 문제는 다음과 같습니다: 우분투 20 호스트에서. 외부에서 액세스할 수 있는 다중 채널 하이퍼바이저와 가상 머신이 있습니다.
물리적 호스트: eth1 192.168.10.33/16
가상 머신: mpqemubr0 10.54.32.232/24
전달이 활성화되었습니다:
cat /etc/sysctl.conf | grep forward
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1
각 인터페이스에서도 활성화됩니다.
cat /proc/sys/net/ipv4/conf/mpqemubr0/forwarding
1
cat /proc/sys/net/ipv4/conf/eth0/forwarding
1
iptables 및 ufw가 비활성화되고 nftables가 설치됩니다.
nftables 구성은 다음과 같습니다.
#!/usr/sbin/nft -f
flush ruleset
table ip nat {
chain prerouting {
type nat hook prerouting priority 100;
ip daddr 192.168.10.33 tcp dport {80,8080} dnat 10.54.32.232:8080
}
chain postrouting {
type nat hook postrouting priority 100; policy accept;
ip saddr 10.54.32.0/24 oifname {eth0,mpqemubr0} masquerade
}
}
table inet filter {
chain input {
type filter hook input priority 0;
}
chain forward {
type filter hook forward priority 0;
ip daddr 10.54.32.232 accept
}
chain output {
type filter hook output priority 0;
}
}
- 호스트에서 포트 8080을 통해 VM에 텔넷으로 연결할 수 있습니다.
- 외부에서 주인에게 연락할 수 있어요
- VM에서 외부로 ping할 수 있습니다.
호스트에서 VM으로 외부적으로 트래픽을 리디렉션할 수 없으며 호스트에서 tcpdump를 사용하면 시스템에서 패킷이 도착하는 것을 볼 수 있지만 포트 8080 또는 호스트 10.54.32.232에는 출력이 없습니다.
sudo tcpdump -i any -n port 80 or port 8080 -vvvv
tcpdump: listening on any, link-type LINUX_SLL (Linux cooked v1), capture size 262144 bytes
14:30:36.229571 IP (tos 0x0, ttl 63, id 5375, offset 0, flags [DF], proto TCP (6), length 60)
10.55.55.16.38848 > 192.168.10.33.80: Flags [S], cksum 0x71ba (correct), seq 560636356, win 64860, options [mss 1380,sackOK,TS val 1972236760 ecr 0,nop,wscale 7], length 0
분명히 가상 머신은 인터페이스에 들어오는 어떤 것도 보지 못합니다.
예전에는 동일한 호스트의 다른 VM과 작동했지만 이를 다시 생성해야 했고 새 VM은 다른 IP를 사용했으며 새 VM IP와 일치하도록 nftables.conf를 변경한 후에도 더 이상 작동하지 않습니다(그런데, 이전 가상 머신)이 더 이상 존재하지 않습니다.
구성이 누락된 것 같습니다. 그런데 어디에 있나요?
당신의 도움을 주셔서 감사합니다!