前提条件:具有公网ip的服务器,局域网下的设备,终端(个人PC)
1 frp内网穿透
1.1 服务端(公网服务器)配置
我选择的是百度的云服务器作为公网服务器,通过SSH远程操控该服务器,下载对应版本的frp压缩包。我选择的是当时最新的v0.38.0。
wget https://github.com/fatedier/frp/releases/download/v0.38.0/frp_0.38.0_linux_amd64.tar.gz
tar zxvf frp_0.38.0_linux_amd64.tar.gz
cd frp_0.38.0_linux_amd64/
服务端的配置文件是 frps.ini,默认绑定 7000 端口,通过 fprs 二进制文件启动 frp 服务。
./frps -c ./frps.ini
提示以下内容代表启动成功
2020/05/15 22:16:29 [I] [service.go:178] frps tcp listen on 0.0.0.0:7000
2020/05/15 22:16:29 [I] [root.go:209] start frps success
1.2 客户端(局域网设备)配置
同样下载frp,客户端的配置文件是 frpc.ini,可多个设备同时启动frpc,需要更改[ssh]为其他名字(如[new_name])以及server_port为新的端口,每个设备名字和端口不能重复。文件内容如下
[common]
server_addr = 127.0.0.1 # 公网服务器 IP 地址
server_port = 7000 # 为公网服务器配置的 7000 端口
[ssh]
type = tcp # 连接类型
local_ip = 127.0.0.1 # 本地IP
local_port = 22 # 用于ssh的端口号,默认22,修改该端口 需要修改 /etc/ssh/ssh_config 中的文件对应端口
remote_port = 6000 # 映射的服务端端口,访问该端口时默认转发到客户端的 22 端口
启动客户端进程
./frpc -c ./frpc.ini
2020/05/15 22:34:49 [I] [service.go:282] [9bc650122a538aab] login to server success, get run id [9bc650122a538aab], server udp port [0]
2020/05/15 22:34:49 [I] [proxy_manager.go:144] [9bc650122a538aab] proxy added: [ssh]
2020/05/15 22:34:49 [I] [control.go:179] [9bc650122a538aab] [ssh] start proxy success
# 同时服务端会显示
2020/05/15 22:16:38 [I] [service.go:432] [e3c5096bd4291972] client login info: ip [14.114.230.168:44422] version [0.24.1] hostname [] os [linux] arch [amd64]
2020/05/15 22:16:38 [I] [tcp.go:63] [e3c5096bd4291972] [ssh] tcp proxy listen port [7001]
2020/05/15 22:16:38 [I] [control.go:445] [e3c5096bd4291972] new proxy [ssh] success
1.3 终端配置
在配置好SSH的终端远程登录局域网的设备
ssh -p 6000 user_name@公网ip
问题:wget网速过慢
解决:安装mwget,命令行同上,只需用mwget替换wget
sudo apt install build-essential
sudo apt upgrade intltool
sudo apt install libssl-dev
git clone https://github.com/rayylee/mwget.git
cd wget
./configure
make && make install
报错:make install报错
解决:sudo make install
问题:SSH无法使用root登录,可以登录普通用户,原因待排查
2 配置SSH
2.1 安装ssh工具
sudo apt-get install openssh-server #局域网下设备
sudo apt-get install openssh-client #个人PC
2.2 启动ssh
/etc/init.d/ssh start
2.3 确认sshserver是否启动
ps -e | grep ssh
如果只有ssh-agent那ssh-server还没有启动,需要/etc/init.d/ssh start,如果看到sshd那说明ssh-server已经启动了。
使用默认配置(允许root登录,端口为22),我使用的是口令登录,每次都需要输入密码,后续尝试采用公钥登录。
3 开机自启动frp
以客户端(局域网下服务器)为例,编写 frpc service 文件(公网服务器上对应为frps.service)
注:systemd文件下可能不存在system文件,需要手动创建文件夹,否则会报错
vim /usr/lib/systemd/system/frpc.service
文件内容如下(ExecStart为froc.ini文件的路径,修改为本机下的绝对路径):
[Unit]
Description=frpc
After=network.target
[Service]
TimeoutStartSec=30
ExecStart=/home/zzzz/frp_0.38.0_linux_amd64/frpc -c /home/zzzz/frp_0.38.0_linux_amd64/frpc.ini
ExecStop=/bin/kill $MAINPID
[Install]
WantedBy=multi-user.target
启动 frp 并设置开机启动
systemctl enable frpc
systemctl start frpc
systemctl status frpc
报错:systemctl 无法启动新服务 Failed to allocate directory watch: Too many open files
解决:
vim /etc/sysctl.conf
sysctl -p #修改文件后使其生效
fs.inotify.max_user_instances=512
fs.inotify.max_user_watches=262144
参考链接:
https://my.oschina.net/u/4429381/blog/4280149?hmsr=kaifa_aladdin
https://www.cnblogs.com/cookiewu/p/9664062.html
https://blog.csdn.net/babytiger/article/details/121274534
https://zhuanlan.zhihu.com/p/222506941