本文仅在 macOS 上试验

内网穿透

内网穿透技术是指将没有固定公网 IP 的设备的内容暴露到公网上,这样就能通过公网远程访问设备的内容。本人的用途一般是在外控制家里的 Mac 电脑的文件与进程,因而只穿透 ssh 服务。

个人电脑上的操作

homebrew安装frp客户端

brew install frpc

修改/opt/homebrew/etc/frp/frpc.toml文件,写入以下内容:

serverAddr = <server-ip>
serverPort = <port1>
auth.method = "token"
auth.token = <your-password>

[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = <port2>

22为 mac 的 ssh 登录默认端口,可修改。
MacSetting ➔ General ➔ Sharing ➔ Remote Login 打开
修改/private/etc/ssh/sshd_config.d/100-macos.conf文件,将UsePAM设置为no
创建/private/etc/ssh/sshd_config.d/self.conf文件,写入以下内容:

Port 22
PermitRootLogin yes
PubkeyAuthentication yes
PasswordAuthentication no

一般来说 mac 用户名对应的密码都是简单密码,用于远程登录风险极大,建议采用密钥登录。
最后启动frpc服务

brew services start frpc

服务器上的操作

首先需要一台有公网 IP 的服务器,在github-frp中下载适合服务器系统的文件,假设放到了/root/frps文件夹下,该文件夹下只需保留frpsfrps.toml文件。
修改frps.toml文件,如下:

bindPort = <port1>
auth.method = "token"
auth.token = <your-password>

这里的<port1>应和frpc.toml中的<port1>一致,
创建frps的守护进程,首先创建/etc/systemd/system/frps.service文件,写入以下内容:

[Unit]
Description=FRP Service
After=network-online.target

[Service]
Type=simple
ExecStart=/root/frps/frps -c /root/frps/frps.toml
Restart=always
User=root

[Install]
WantedBy=default.target

防火墙打开对应端口

ufw allow <port1>
ufw allow <port2>

再运行该服务

systemctl daemon-reload
systemctl start frps

第三台机器上的操作

如果要在第三台机器上访问 mac 上的内容,首先需要将 ssh 公钥放进 mac 的~/.ssh/authorized_keys当中,在本地保存好 ssh 私钥。通过以下命令连接

ssh <mac-user>@<server-ip> -p <port2>