利用frp中的xtcp实现点对点连接手机服务器

2020-09-02 frpxtcp

frp 提供了一种新的代理类型 xtcp 用于应对在希望传输大量数据且流量不经过服务器的场景

# 0x00 准备

# 说明

目前xtcp还不是很稳定,当受控端(手机)和控制端(电脑)处于一个内网下时,可能穿透会失败。

# 环境

# 实现效果

由于xtcp存在可能穿透失败的情况,为了保证随时能连上手机服务器,保留常规穿透方案(备选),所以有两种连接方式。

  1. 第一种:适用于传输大文件时使用(点对点,流量不经过公网服务器)
ssh root@127.0.0.1 -p 1234
1
copy
  1. 第二种:常规穿透(备选:xtcp失败时使用)
ssh root@1.2.3.4 -p 1235
1
copy

# 0x01 公网服务器安装frps

  1. 下载服务器对应版本的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
copy
  1. 配置 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
copy
  1. 移动frpsfrps.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
copy
  1. 启动 frps ,检查配置是否正确
frps -c /etc/frp/frps.ini
1
copy

查看日志 /var/log/frp/frps.log 中显示连接成功就说明配置没有问题

  1. 实现开机自启

将解压后的文件夹下systemd/目录下的frps.servicefrps@.service移动到/lib/systemd/system/目录下

mv systemd/frps* /lib/systemd/system/
systemctl enable frps
systemctl start frps
systemctl status frps
1
2
3
4
copy
  1. 删除解压包和下载的文件
cd ../
rm -rf frp_0.34.3_linux_amd64*
1
2
copy

# 0x02 受控端(手机服务器)安装frpc

  1. 下载手机对应版本的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
copy
  1. 配置 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
copy
  1. 移动frpcfrpc.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
copy
  1. 启动 frps ,检查配置是否正确
frpc -c /etc/frp/frpc.ini
1
copy

查看日志 /var/log/frp/frpc.log 中显示连接成功就说明配置没有问题

  1. 实现开机自启

由于Linux系统是运行在容器里的,没法用 “systemctl”

  1. 在Linux Deploy设置中启用 初始化

  2. 初始化系统为 run-parts

  3. 初始化路径 /etc/rc.local

  4. 编辑或新建/etc/rc.local文件

touch /etc/rc.local
chmod +x /etc/rc.local
vim /etc/rc.local
1
2
3
copy
  • 其中rc.local的内容为
#!/bin/sh -e
nohup frpc -c /etc/frp/frpc.ini >/dev/null 2>&1 &

exit 0
1
2
3
4
copy
  1. 删除解压包和下载的文件
cd ../
rm -rf frp_0.34.3_linux_arm64*
1
2
copy

# 0x03 控制端(电脑)安装frpc

  1. Windows选择 windows_amd64 版本
  2. 将下载后的文件解压,仅保留 frpcfrpc.ini两个文件,其余删除
  3. 配置 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
copy
  1. 启动 frpc cmd命令:frpc.exe -c frpc.ini

# 0x04 参考资料

上次更新: 2024-01-13
Powered By Valine
v1.4.16