无需网络连接的 VNC

无需网络连接的 VNC

我想在我的电脑和手机之间建立 VNC 连接。我在电脑上创建了一个 Wi-Fi 热点,并将手机连接到此 Wi-Fi 网络。我在电脑上设置了一个 VNC 服务器,使用tigervnc。我检查了一下,它正在运行:

_$ sudo systemctl status [email protected][email protected] - Remote desktop service (VNC)
   Loaded: loaded (/etc/systemd/system/[email protected]; enabled; vendor prese
   Active: active (running) since Wed 2019-08-07 18:27:15 CEST; 2h 41min ago
 Main PID: 10463 (vncserver)
    Tasks: 0 (limit: 4915)
   Memory: 904.0K
   CGroup: /system.slice/system-vncserver.slice/[email protected]
       ‣ 10463 /usr/bin/perl /usr/bin/vncserver :1 -geometry 1440x900 -alway_

我还检查了端口 5901:

_$ nmap localhost
Starting Nmap 7.70 ( https://nmap.org ) at 2019-08-07 18:43 CEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00049s latency).
Not shown: 998 closed ports
PORT     STATE SERVICE
631/tcp  open  ipp
5901/tcp open  vnc-1_

我在手机上安装了一个 VNC 客户端。我没有设置 ssh。我尝试用该地址连接到服务器localhost:5901。但无济于事;我看到了以下消息:

“无法联系计算机正在监听连接的端口。”

我不知道为什么我无法连接。Ubuntu 服务器没有运行防火墙。

这是“sudo iptables-save”的结果

$ sudo iptables-save  
 # Generated by iptables-save v1.6.1 on Wed Aug  7 22:52:46 2019  
*filter  
:INPUT ACCEPT [6569:5209874]  
:FORWARD ACCEPT [0:0]  
:OUTPUT ACCEPT [5441:510108]  
-A INPUT -i wlp3s0 -p udp -m udp --dport 67 -j ACCEPT  
-A INPUT -i wlp3s0 -p tcp -m tcp --dport 67 -j ACCEPT  
-A INPUT -i wlp3s0 -p udp -m udp --dport 53 -j ACCEPT  
-A INPUT -i wlp3s0 -p tcp -m tcp --dport 53 -j ACCEPT  
-A FORWARD -d 10.42.0.0/24 -o wlp3s0 -m state --state RELATED,ESTABLISHED -j ACCEPT  
-A FORWARD -s 10.42.0.0/24 -i wlp3s0 -j ACCEPT  
-A FORWARD -i wlp3s0 -o wlp3s0 -j ACCEPT  
-A FORWARD -o wlp3s0 -j REJECT --reject-with icmp-port-unreachable  
-A FORWARD -i wlp3s0 -j REJECT --reject-with icmp-port-unreachable  
COMMIT  
 # Completed on Wed Aug  7 22:52:46 2019  
 # Generated by iptables-save v1.6.1 on Wed Aug  7 22:52:46 2019  
*nat  
:PREROUTING ACCEPT [215:28223]  
:INPUT ACCEPT [160:24399]  
:OUTPUT ACCEPT [677:49578]  
:POSTROUTING ACCEPT [643:47493]  
-A POSTROUTING -s 10.42.0.0/24 ! -d 10.42.0.0/24 -j MASQUERADE  
COMMIT  
 # Completed on Wed Aug  7 22:52:46 2019  

答案1

在手机上,您需要输入要连接的电脑上的接口地址。因此,这是手机需要连接的 PC 上的 WiFi 接口(创建无线连接的东西)。

因此,在你的电脑上运行以下命令:

    ip addr

并查找您的 WiFi 接口名称。这可能是您的 WiFi 卡或 USB WiFi 加密狗,名称可能类似于“wlx503eaa2592a3”。

现在,除了该接口名称外,还应该有一个 IP 地址。它前面会有“inet”字样,可能类似于 192.168.42.186(这是私有 IP 地址的示例)。这是一个 IPv4 地址。

如果您的接口没有 IPv4 IP 地址,那么您需要转到网络设置并在那里设置一个选项,要求将这样的地址分配给该接口 - 如果这不起作用,您可能需要手动设置一个。

因此,当您的 PC WiFi 接口具有 IPv4 地址时,您需要使用该接口地址从手机连接到该接口。

此外,您的 WiFi 网络需要在该接口的网络设置中设置为“受信任”,否则防火墙可能会阻止连接。或者,如果该接口的安全设置更严格,您可能需要将防火墙设置为允许此类连接。但如果您在家中刚开始使用,那么要么尝试简单的“受信任”规则,要么关闭防火墙片刻 - 但在关闭之前请断开与互联网和所有其他网络的连接。最好在您无需担心数据的测试机上进行操作。

我个人采用相反的方式进行连接。我在手机上创建一个 WiFi 热点,然后使用 PC 连接到该热点。在手机的 VNC 客户端上,我输入要连接的 USB 加密狗的 PC WiFi(IPv4)接口地址。此外,tigervnc 允许不使用任何密码或加密,因此对于初学者,我建议使用这些选项只是为了让事情正常运转并查看它是否真的有效。例如,我使用“抓取”VNC 服务器使我的主要和唯一会话也可通过 VNC 访问:

x0tigervncserver -SecurityTypes none -display :0 -localhost no --I-KNOW-THIS-IS-INSECURE

因此,这将运行一个完全没有安全性、没有密码、也不需要用户名的 VNC 服务器。服务器将我的手机客户端直接连接到显示器 0 上的标准会话。但默认情况下,在这种情况下,tigervnc 将仅连接本地客户端 - 即,仅连接同一台计算机上的 VNC 客户端(仅在本地主机上,因此称为本地主机,因为它仅位于机器本身的本地)。因此,我需要使用标志“-localhost no”和“--I-KNOW-THIS-IS-INSECURE”来覆盖此功能。然后,这将使 VNC 服务器接受来自网络的连接。我需要在 VNC 客户端中输入的是运行 VNC 服务器的机器的 IPv4 接口地址。(要列出正在运行的服务器,请使用“x0tigervncserver -list”。要终止服务器,请运行“x0tigervncserver -kill”。)

答案2

您必须使用服务器的地址,而不是localhost客户端的地址。您可以通过运行以下命令找到服务器的内部 IP 地址

hostname -I

如果有多个 IP 地址,请全部尝试。

相关内容