현재 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의 방화벽 클라우드 메뉴에서 포트를 열 수 있습니다. 그리고 테스트 후 작동하지 않으면 다른 옵션을 알려 드리겠습니다.
문안 인사