Linux-在Linux环境下使用frp实现内网穿透(SSH)
内网穿透:通过互联网,访问内网的资源,让内网的数据在外网的电脑上可以获取。
本文部署场景:Linux工作站部署在办公室中,可以连外网,但是没有公网IP,只能在办公室内局域网通过SSH连接。使用内网穿透后,可以在非办公室的外网,连接此工作站。
工具:frp(建议:Sakura Frp — 免费内网穿透_免费端口映射_高速_高防节点_不限流量_Minecraft我的世界_微信开发调试_群辉NAS_无需公网_免备案 (natfrp.com))
进入软件下载页面,选择“Linux系统 -> amd64 -> 下载”(除非你使用的是其他架构的工作站,需要选择对应工作站架构的文件)。将下载的文件放到“/usr/local/bin/”中(也可以放到其他文件夹中,可能会影响配置开机自启)
1. 创建隧道
在“管理面板 -> 穿透 -> 隧道列表”中新建隧道,选择合适的节点和隧道类型(此处使用TCP)
本地ip默认使用127.0.0.1,本地端口选择SSH(22),需要先确认本地服务器已经安装了ssh-server以及打开了22端口。
创建完成后,在管理页面即可看到创建号的隧道。
2.1 本地开启隧道(GUI)
./frpc_linux_amd64
在 frpc.ini 不存在的情况下,不带参数直接运行 frpc 会出现一个交互式 UI

输入访问密钥,然后使用 Tab 键切换到 Login 按钮并按 回车 键登录 (若终端支持也可使用鼠标进行操作)。访问密钥在“管理面板”的首页中的“账号信息”右侧。

选择完毕后,按 Ctrl-C 即可启动隧道,相关启动参数会被保存到配置文件 frpc.ini 中,下次不带参数直接运行 frpc 时不再显示 TUI 而是直接启动隧道
2.2 本地开启隧道(命令行)
frpc -f <访问密钥>:<隧道ID>
隧道ID可以在管理页面查看
3. 远程连接
隧道启动成功后回提供IP地址或网址的方式连接隧道

在xshell中输入对应信息,即可在外网访问本地的工作站。
或使用CMD:ssh -p xx user@ip xx 为 端口号 user为用户名 ip为要登陆的ip
可能出现的问题:
1) frpc客户端连接会提示 login to server failed: EOF
解决办法
打开frpc所在文件夹中的frpc.ini
输入 tls_enable = true

此命令为frpc 开启 TLS 加密功能,但是默认不校验 frps 的证书。
2) 登录节点失败: read tcp ***: read: connection reset by peer, 请检查网络连接
更改
disable_custom_tls_first_byte = true
sudo vim /etc/systemd/system/frpc.service
在该文件中粘贴如下内容
[Unit] Description=SakuraFrp Service After=network.target [Service] Type=idle User=nobody Restart=on-failure RestartSec=60s ExecStart=/usr/local/bin/frpc -c /usr/local/bin/frpc.ini [Install] WantedBy=multi-user.target
上述内容要求frpc在/usr/local/bin/frpc,以及frpc.ini需要在同一文件夹下,此外,需要对frpc.ini执行sudo chmod +777命令。
重载 Systemd
sudo systemctl daemon-reload
启动/停止隧道
sudo systemctl start frpc sudo systemctl stop frpc
隧道开机自启动
sudo systemctl enable frpc
5. openSSH免密登录
在本机输入(Windows:CMD/PowerShell)
ssh-keygen -t rsa
一直按回车,会生成ssh的公钥和私钥:
id_rsa(私钥)
id_rsa.pub(公钥)
将公钥改名为“authorized_keys”,复制到目标主机的/home/username/.ssh中

浙公网安备 33010602011771号