Google Cloud VM이 Minecraft 트래픽을 OpenVPN 클라이언트로 전달하도록 만드는 방법은 무엇인가요?

Google Cloud VM이 Minecraft 트래픽을 OpenVPN 클라이언트로 전달하도록 만드는 방법은 무엇인가요?

현재 Google VM을 서버로 사용하고 Minecraft 서버를 실행하는 Raspberry Pi 3 클라이언트를 사용하여 "탭" 모드로 설정된 OpenVPN 네트워크가 있습니다.

사용자는 현재 자신의 컴퓨터에서 OpenVPN 클라이언트를 실행하고 Pi의 OpenVPN IP를 Minecraft 클라이언트(예: 10.8.0.2)에 입력하여 Minecraft 서버에 연결할 수 있습니다.

하지만 사용자가 OpenVPN을 설치할 필요 없이 Google VM의 외부 IP를 사용하여 Minecraft 서버에 액세스할 수 있도록 하고 싶습니다. ISP 이중 계층 NAT로 인해 사용자는 Pi의 주소를 직접 사용할 수 없습니다.

나는 다음을 시도했다이 답변. 특히 나는 다음을 실행했습니다.

iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 25565 -j DNAT --to-destination 10.8.0.2:25565
iptables -A FORWARD -p tcp -d 10.8.0.2 --dport 25565 -j ACCEPT
iptables -A POSTROUTING -t nat -s 10.8.0.2 -o eth0 -j MASQUERADE

VM의 인터페이스는 eth0 및 tap0입니다. IP 전달은 콘솔에서 활성화됩니다.

서버 방화벽은 0.0.0.0/0 TCP:25565 및 UDP:25565의 트래픽을 허용하도록 설정되어 있습니다.

하지만 Google VM의 외부 IP를 사용하여 연결하려고 하면 "연결 시간 초과" 메시지가 나타납니다. NMAP에서는 포트 25565가 "필터링"되어 있다고 알려줍니다.

추가 정보, iptables-save:

# Generated by iptables-save v1.6.0 on Thu Sep 26 11:42:02 2019
*nat
:PREROUTING ACCEPT [106:35257]
:INPUT ACCEPT [75:15902]
:OUTPUT ACCEPT [111:6692]
:POSTROUTING ACCEPT [6:328]
-A PREROUTING -i eth0 -p tcp -m tcp --dport 25565 -j DNAT --to-destination 10.8.0.3:25565
-A PREROUTING -i eth0 -p udp -m udp --dport 25565 -j DNAT --to-destination 10.8.0.3:25565
-A PREROUTING -i eth0 -p tcp -m tcp --dport 25565 -j DNAT --to-destination 10.8.0.3:25565
-A PREROUTING -i eth0 -p udp -m udp --dport 25565 -j DNAT --to-destination 10.8.0.3:25565
-A PREROUTING -d 35.197.47.71/32 -p tcp -m tcp --dport 25565 -j DNAT --to-destination 10.8.0.3:25565
-A PREROUTING -d 35.197.47.71/32 -p udp -m udp --dport 25565 -j DNAT --to-destination 10.8.0.3:25565
-A PREROUTING -i eth0 -p tcp -m tcp --dport 25565 -j DNAT --to-destination 10.8.0.3:25565
-A PREROUTING -i eth0 -p tcp -m tcp --dport 25565 -j DNAT --to-destination 10.8.0.3:25565
-A POSTROUTING -s 10.0.0.0/8 -o eth0 -j MASQUERADE
-A POSTROUTING -s 10.0.0.0/8 -o eth0 -j MASQUERADE
-A POSTROUTING -s 10.8.0.3/32 -o eth0 -j MASQUERADE
-A POSTROUTING -s 10.8.0.2/32 -o eth0 -j MASQUERADE
COMMIT
# Completed on Thu Sep 26 11:42:02 2019
# Generated by iptables-save v1.6.0 on Thu Sep 26 11:42:02 2019
*filter
:INPUT ACCEPT [1822:367429]
:FORWARD ACCEPT [13:700]
:OUTPUT ACCEPT [1610:231716]
-A FORWARD -d 10.8.0.2/32 -p tcp -m tcp --dport 25565 -j ACCEPT
COMMIT
# Completed on Thu Sep 26 11:42:02 2019

--list-rules:

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A FORWARD -d 10.8.0.3/32 -p tcp -m tcp --dport 25565 -j ACCEPT

답변1

내 생각에 문제는 파이로 라우팅되는 패킷을 가장하지 않고 파이의 모든 트래픽이 터널로 라우팅되도록 만들어지지 않는다는 것입니다.

이는 외부 세계의 패킷이 pi에 도달할 수 있지만 pi가 이에 응답할 때 응답 패킷이 먼저 Google VM으로 라우팅되지 않고 인터넷 게이트웨이를 통해 클라이언트에 직접 전송될 수 있음을 의미합니다. 따라서 클라이언트가 인식할 수 없습니다).

또한 pi에 터널에서 들어오는 패킷을 필터링하는 방화벽이 있는 경우(예: 다른 VPN 호스트의 패킷만 허용) VM에서 오는 것처럼 가장되지 않은 패킷은 필터링됩니다.

따라서 다음이 필요할 수 있습니다.

iptables -t nat -A POSTROUTING -d 10.8.0.x -o tap0 -j MASQUERADE

답변2

Google의 방화벽 클라우드 메뉴에서 포트를 열 수 있습니다. 그리고 테스트 후 작동하지 않으면 다른 옵션을 알려 드리겠습니다.

문안 인사

관련 정보