通过 FRP 内网穿透并实现 VNC 远程访问 Mac 桌面

受疫情影响,很多人都开始了远程办公。部分公司平时没有做好准备,导致一时半会儿链接不上公司内网的服务器,更别说部署虚拟专用网络了。这篇文章主要介绍 FRP 的使用方法,虽然没法解决当前连不上内网的问题,但可作为今后的预防措施,在关键时刻助你一臂之力。

需要准备的东西有:

  1. 一台链接到公网的服务器,本篇以 阿里云 为例,系统为 Debian 64 位
  2. 一台处于内网的 Mac,可以访问互联网

1. 公网服务器部署 FRP 服务端 frps

下载 FRP 程序 ,确保和服务器匹配:

# 下载程序
wget https://github.com/fatedier/frp/releases/download/v0.31.2/frp_0.31.2_linux_amd64.tar.gz

# 解压缩
tar -zxvf frp_0.31.2_linux_amd64.tar.gz

# 进入目录
cd frp_0.31.2_linux_amd64

解压后可以看到有 8 个文件

frpc          # 客户端程序
frpc_full.ini # 完整的客户端配置文件
frpc.ini      # 客户端配置文件
frps          # 服务端程序
frps_full.ini # 完整的服务端配置文件
frps.ini      # 服务端配置文件
LICENSE       # 服务端配置文件
systemd       # 开机启动服务文件

编辑 frps.ini,如下:

[common]
bind_port = 7000        # 用于和 FRP 客户端通信
kcp_bind_port = 7000    # 加速 TCP 访问,与 bind_port 值一致
token = 12345678        # 核实身份用,加了更安全

运行 ./frps -c ./frps.ini 看看结果,正常启动如下图。

image.png

2. 内网设备部署 FRP 客户端 frpc

下载 FRP 程序 ,Mac 版的名字是这样的 frp_x.x.x_darwin_amd64.tar.gz,并解压。

编辑解压后的 frpc.ini 文件,如下:

[common]
server_addr = x.x.x.x      # 公网服务器 IP 地址
server_port = 7000         # 绑定端口,和服务端一致
protocol = kcp             # 开启加速
token = 12345678           # 与服务端一致
; login_fail_exit = false  # 无网络时一直等待不退出

[vnc]
type = tcp
local_ip = 127.0.0.1
local_port = 5900
remote_port = 5900
use_encryption = true
use_compression = true

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000
use_encryption = true
use_compression = true

执行 ./frpc -c ./frpc.ini 启动连接,正常启动如下图。

image.png

注意:建立链接时如果出现报错,请检查公网服务器端口是否被限制,阿里云 等云服务需要在控制台配置安全组规则,如下图:

image.png

启用 KCP 时,一定要开启对应端口的 UDP 协议。

3. 开启远程桌面或 SSH 登录

以上服务都启动后,我们需要进入 Mac 的【系统偏好设置】->【共享】,勾选“屏幕共享”和“远程登录”,用户为“所有用户”。

image.png

3.1 VNC 登录 Mac

打开“访达(Finder)”,选择菜单【前往】->【链接服务器】,输入
vnc://x.x.x.x:5900(将 x.x.x.x 替换成公网服务器 IP 地址)

image.png

如果连接成功,就会出现下面的界面,只要输入 Mac 的用户名和密码就行了

image.png

3.2 SSH 登录 Mac

在终端里执行 ssh Mac用户名@x.x.x.x -p 6000(将 x.x.x.x 替换成公网服务器 IP 地址),输入密码后即可登录成功。

4. 添加自动启动

4.1 将 frps 加入自动启动

进入公网服务器,执行下列命令:

sudo cp /xxx/frps /usr/bin/       # 将执行文件移入系统目录
sudo cp /xxx/frps.ini /etc/frp/   # 将配置文件移入系统配置目录

# 添加自启动配置
sudo cp /xxx/systemd/frps.service /lib/systemd/system/ 

sudo systemctl daemon-reload       # 重新加载配置
sudo systemctl enable frps.service # 启用 frps 开机启动
sudo systemctl start frps.service  # 启动 frps 服务
systemctl status frps.service      # 查看 frps 服务状态

4.2 将 frpc 加入自动启动

进入内网 Mac 系统,执行下列操作:

# 编辑自启动文件
touch ~/Library/LaunchAgents/frpc.plist
vim ~/Library/LaunchAgents/frpc.plist

frpc.plist 文件内容如下,注意文件中的 frpcfrpc.ini 路径,可以将这两个文件移到下方配置文件的路径下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//DTD PLIST 1.0//EN
http://www.apple.com/DTDs/PropertyList-1.0.dtd >
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>frpc</string>
    <key>ProgramArguments</key>
    <array>
     <string>/usr/local/bin/frpc/frpc</string>
         <string>-c</string>
     <string>/usr/local/bin/frpc/frpc.ini</string>
    </array>
    <key>KeepAlive</key>
    <true/>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

加载并生效:

sudo chown root ~/Library/LaunchAgents/frpc.plist
sudo launchctl load -w ~/Library/LaunchAgents/frpc.plist

别忘了还需要保证 Mac 处于开机运行状态。至此,所有的配置都完成了。


本文参与了 SegmentFault 思否征文「远程办公」,欢迎正在阅读的你也加入。

阅读 1.4k

推荐阅读
Hello Wiki
用户专栏

在跟谁谁谁谈笑风生呢

51 人关注
11 篇文章
专栏主页
目录