frp 提供了一种新的代理类型 xtcp 用于应对在希望传输大量数据且流量不经过服务器的场景
# 0x00 准备
安装Linux Deploy将闲置手机打造成个人服务器:https://conimi.com/archives/126 (opens new window)
# 说明
目前xtcp还不是很稳定,当受控端(手机)和控制端(电脑)处于一个内网下时,可能穿透会失败。
# 环境
- 公网服务器:1.2.3.4
- 手机服务器:192.168.1.1(内网1)【开启两个端口登录:22和222】
- 修改ssh默认端口并开启多端口:https://conimi.com/archives/114 (opens new window)
- 控制端(电脑):192.168.5.6(内网2)
# 实现效果
由于xtcp存在可能穿透失败的情况,为了保证随时能连上手机服务器,保留常规穿透方案(备选),所以有两种连接方式。
- 第一种:适用于传输大文件时使用(点对点,流量不经过公网服务器)
ssh root@127.0.0.1 -p 1234
1
copy- 第二种:常规穿透(备选:xtcp失败时使用)
ssh root@1.2.3.4 -p 1235
1
copy# 0x01 公网服务器安装frps
- 下载服务器对应版本的frp,并解压
wget https://github.com/fatedier/frp/releases/download/v0.34.3/frp_0.34.3_linux_amd64.tar.gz
tar -zxvf frp_0.34.3_linux_amd64.tar.gz
1
2
copy2
- 配置
frps.ini
(关键),我的配置如下
[common]
bind_addr = 0.0.0.0
bind_port = 7000
auth_token = 123456qwerty
log_file = /var/log/frp/frps.log
log_level = info
log_max_days = 3
bind_udp_port = 7001
1
2
3
4
5
6
7
8
9
copy2
3
4
5
6
7
8
9
- 移动
frps
和frps.ini
到指定路径并创建日志存储路径
cd frp_0.34.3_linux_amd64
mv frps /usr/bin/
mkdir /etc/frp/
mv frps.ini /etc/frp/
mkdir /var/log/frp/
chown -R nobody:nogroup /var/log/frp/ # 更改用户组,否则没有写入权限
1
2
3
4
5
6
7
copy2
3
4
5
6
7
- 启动
frps
,检查配置是否正确
frps -c /etc/frp/frps.ini
1
copy查看日志 /var/log/frp/frps.log
中显示连接成功就说明配置没有问题
- 实现开机自启
将解压后的文件夹下systemd/
目录下的frps.service
和frps@.service
移动到/lib/systemd/system/
目录下
mv systemd/frps* /lib/systemd/system/
systemctl enable frps
systemctl start frps
systemctl status frps
1
2
3
4
copy2
3
4
- 删除解压包和下载的文件
cd ../
rm -rf frp_0.34.3_linux_amd64*
1
2
copy2
# 0x02 受控端(手机服务器)安装frpc
- 下载手机对应版本的frp(手机版本选择
linux_arm64
),并解压
wget https://github.com/fatedier/frp/releases/download/v0.34.3/frp_0.34.3_linux_arm64.tar.gz
tar -zxvf frp_0.34.3_linux_arm64.tar.gz
1
2
copy2
- 配置
frpc.ini
(关键),我的配置如下
[common]
server_addr = 1.2.3.4
server_port = 7000
auth_token = 123456qwerty
log_file = /var/log/frp/frpc.log
log_level = info
log_max_days = 3
login_fail_exit = false
[ssh_server]
type = xtcp
role = server
sk = abcdefg
local_ip = 127.0.0.1
local_port = 22
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 222
remote_port = 1235
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
copy2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
- 移动
frpc
和frpc.ini
到指定路径并创建日志存储路径
cd frp_0.34.3_linux_arm64
mv frpc /usr/bin/
mkdir /etc/frp/
mv frpc.ini /etc/frp/
mkdir /var/log/frp/
chown -R nobody:nogroup /var/log/frp/ # 更改用户组,否则没有写入权限
1
2
3
4
5
6
7
copy2
3
4
5
6
7
- 启动
frps
,检查配置是否正确
frpc -c /etc/frp/frpc.ini
1
copy查看日志 /var/log/frp/frpc.log
中显示连接成功就说明配置没有问题
- 实现开机自启
由于Linux系统是运行在容器里的,没法用 “systemctl”
在Linux Deploy设置中启用
初始化
初始化系统为
run-parts
初始化路径
/etc/rc.local
编辑或新建
/etc/rc.local
文件
touch /etc/rc.local
chmod +x /etc/rc.local
vim /etc/rc.local
1
2
3
copy2
3
- 其中rc.local的内容为
#!/bin/sh -e
nohup frpc -c /etc/frp/frpc.ini >/dev/null 2>&1 &
exit 0
1
2
3
4
copy2
3
4
- 删除解压包和下载的文件
cd ../
rm -rf frp_0.34.3_linux_arm64*
1
2
copy2
# 0x03 控制端(电脑)安装frpc
- Windows选择
windows_amd64
版本 - 将下载后的文件解压,仅保留
frpc
和frpc.ini
两个文件,其余删除 - 配置
frpc.ini
(关键),我的配置如下
[common]
server_addr = 1.2.3.4
server_port = 7000
auth_token = 123456qwerty
log_file = frpc.log
log_level = info
[ssh_visitor]
type = xtcp
server_name = ssh_server
role = visitor
sk = abcdefg
bind_addr = 127.0.0.1
bind_port = 1234
1
2
3
4
5
6
7
8
9
10
11
12
13
14
copy2
3
4
5
6
7
8
9
10
11
12
13
14
- 启动
frpc
cmd命令:frpc.exe -c frpc.ini
# 0x04 参考资料
- LinuxDeploy里的Ubuntu自启动nginx(适用于其他软件):https://www.cnblogs.com/Luad/p/10409048.html (opens new window)
v1.4.16