前言

最近买了几台国外nat鸡,然后IP又被墙了,恰好又买了国内商家的1元NAT鸡,正好可以利用起来去做个转发,切勿用作违法行为(ps:FRP流量特征明显,切勿作死,可以使用GOST等其他开源工具)

部署准备

  • 下载系统对应FRP二进制包
  • 中转机安装FRPS
  • 被转发机安装FRPC

部署步骤

这里我自己写了一个简易的FRPC简易脚本,我转发的是ssh端口,FRPS这里就不介绍,跟FRPC相差无几。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#!/bin/bash
SERVER_PORT=30212
#all port 30211-30219
#usable port 30213-30218
SERVER_IP=mhy7.muhanyun.cn
FRP_PATH=/etc/frp
REMOTE_PORT=30219
#FRP_VERSION=v0.51.2
#FRP_PLATFROM=amd64
#!! windows need .bat script or .ps1 (powershell) and nssm or other self-starting service
#FRP_OS=linux
FRPDOWNLOAD_URL=https://github.com/fatedier/frp/releases/download/v0.51.2/frp_0.51.2_linux_amd64.tar.gz
#FRPDOWNLOAD_URL=https://pan.alybaba.top/soft/frp_0.51.2_linux_amd64.tar.gz
#!! if you network unreachable,use this link
FRP=$(basename ${FRPDOWNLOAD_URL})
FRP_DIR=$(basename ${FRP} .tar.gz)
FRP_TOKEN=you_token
LOCAL_PORT=22
FRP_SERVICE_NAME=SSH


frpc_install() {
#Download FRPC
[ -d ${FRP_PATH} ] || mkdir ${FRP_PATH}
command -v wget &>/dev/null || apt install wget -y &>/dev/null
echo "just download frp,plz wait moment..."
wget ${FRPDOWNLOAD_URL} &>/dev/null && tar -xf ${FRP} -C ${FRP_PATH} || exit 66 && echo "download failed,please check you network"
# read -p "plz input you ssh connect port: " REMOTE_PORT
#FRPC CONFIG
cat <<EOF > ${FRP_PATH}/${FRP_DIR}/frpc.ini
#FRPS SETTING
[common]
server_addr = ${SERVER_IP}
server_port = ${SERVER_PORT}
token = ${FRP_TOKEN}
tls_enable = true

#FRPC SETTING
[${FRP_SERVICE_NAME}]
type = tcp
local_ip = 127.0.0.1
local_port = ${LOCAL_PORT}
remote_port = ${REMOTE_PORT}
use_compression = true
use_encryption = true
EOF

echo "frpc install finished"
sleep 1

id frpc &>/dev/null || useradd -s /sbin/nologin frpc
chown -R frpc.frpc ${FRP_PATH}/${FRP_DIR}
#FRPC DAEMON FILE
cat <<EOF > /etc/systemd/system/frpc.service
[Unit]
Description=Frp Client Service
After=network.target

[Service]
Type=simple
User=frpc
Restart=on-failure
RestartSec=5s
ExecStart=${FRP_PATH}/${FRP_DIR}/frpc -c ${FRP_PATH}/${FRP_DIR}/frpc.ini
ExecReload=${FRP_PATH}/${FRP_DIR}/frpc reload -c ${FRP_PATH}/${FRP_DIR}/frpc.ini
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target
EOF
#START FRPC
systemctl daemon-reload && systemctl enable --now frpc
sleep 1;
echo "you frps forward domain is ${SERVER_IP}"
echo "you frps forward port is ${REMOTE_PORT}"
}

#frps_install() {
#}

frpc_install
#frps_install

总结

  • 脚本只是简单的转发了SSH端口,有兴趣可以参考官网做更进一步的配置,如TCP,UDP,tcpmux等。
  • 如果有多个ssh端口需要转发,可尝试tcpmux(tcp多路复用),开始我以为是不可以的,看了下官方文档是可以的,不过这里我就没尝试了
  • 本脚本只是自用,所以并没有写判断(GO语言就是牛逼),只使用了简单的短路符
  • 可以转发3389端口,利用一些工具将FRPC设置自启,如nssm。我自己家里的电脑就是转发出去了,方便在公司远程,当然也可反向把公司某些服务转发出来,注意安全
  • 切记密码设置复杂,因为FRP流量特征是明显,很多兄弟都能嗅探到,直接开启暴力破解,token到无所谓,顶多浪费你硬件资源
  • 我朋友拿ESXi 开了个虚拟机做转发3389端口,密码没有配置复杂,直接被勒索。当然只是测试,无所谓,安全推荐stcp
  • 记得开启对应端口防火墙,如不指定用户则为nobody,FRP为C/S架构
  • 除去平台架构和系统外,基本上全平台通用,这也是为什么我使用FRP的原因,配置来说也相对较为简便

参考链接