frp实现内网穿透访问内网多台Linux服务器

本文主要参考了frp实现内网穿透访问内网多台Linux服务器FLASK使用AJAX进行访问数据库异步加载下拉框

本文主要记录笔者在使用frp实现内网穿透访问内网多台Linux服务器的全过程,包括公网服务器的配置、frp服务端、客户端的下载与配置,以及配置systmctl来实现系统级启停frp,并记录我遇到的一些问题。希望对大家有所帮助。

一、准备一台公网服务器#

笔者申请的是一台腾讯云服务器。

1、打开安全组相关端口#(我服务器默认是开启了全部端口就不用配置这一步)

  • 路径:控制台->安全组->修改规则->添加规则
  • 来源:0.0.0.0/0
  • 协议端口:
TCP:7000
TCP:6000
TCP:6001
TCP:6002
  • 策略:允许

注意:入站和出站均需添加。

2、打开防火墙#(我没有配置这一步,也没有影响)

# 启用
sudo ufw enable
 # 开放端口
sudo ufw allow 7000
sudo ufw allow 6000
sudo ufw allow 6001
sudo ufw allow 6002
 # 查看状态
sudo ufw status

二、下载frp#

分别下载frp到公网服务器和内网服务器:

wget https://github.com/fatedier/frp/releases/download/v0.35.1/frp_0.35.1_linux_amd64.tar.gz

然后解压到/usr/local路径下(有可能需要sudo权限)

mkdir /usr/local/frp_0.35.1
tar -zxvf frp_0.35.1_linux_amd64.tar.gz -C /usr/local/frp_0.35.1 --strip-components 1

解压后路径/usr/local/frp_0.35.1内容如下

frpc  frpc_full.ini  frpc.ini  frps  frps_full.ini  frps.ini  LICENSE  systemd

ps:--strip-components 1表示跳过第一层目录进行解压

三、配置公网服务器(frps:frp服务端)#

修改 frps.ini 文件,这里使用了最简化的配置,设置了 frp 服务器用户接收客户端连接的端口:

vim /usr/local/frp_0.35.1/frps.ini
[common]
bind_port = 7000 # 这个是公网服务器的端口,我购买的是tecent云的服务器,其安全策略里面得设置开放此端口
vhost_http_port = 8890 #这个是用来给jupyter开放的http端口

四、配置内网服务器(frpc:frp客户端)#

在需要被访问的内网机器上(SSH 服务通常监听在 22 端口)部署 frpc,修改 frpc.ini 文件,假设 frps 所在服务器的公网 IP 为x.x.x.x

且由于有三台内网机器同时以同一台公网机器作为跳板机,所以这三台内网机器的client名称需要不同,即frpc.ini中的[ssh]需要分别设置为[ssh1][ssh2][ssh3],以示区分。

且这里三台服务器的remote_port分别配置为600060016002。否则会出现端口被占用,导致无法正常连接到内网机器的情况。

内网机器1:

vim /usr/local/frp_0.35.1/frpc.ini

[common]
server_addr = x.x.x.x # 公网ip
server_port = 7000 # 在公网开放的端口

[ssh1] # 这里是client的一个别名,命名为ssh1以和其他client区分
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000 # 这个是公网服务器的端口,安全策略里面也得设置开放此端口

# 这个是对于穿透jupyter配置
[jupyter]
type = http
local_port = 8890 # 你的jupyter 服务器的端口
custom_domains = 公网ip 和上面相同

五、分别启动服务器(我使用的Tmux来保持连接)

启动服务器端./frps -c frps.ini
启动客户端./frpc -c frpc.ini

打开jupyter notebook

jupyter notebook  --port 8890 #指定端口号

登录即可使用ssh -p 600X(端口号) 用户名@XX.XX.XX.XX(公网IP)

我的配置到此结束,以下为搬运

五、分别启动内网公网服务器FRP#

1、在公网服务器上启动frps服务端#

为了方便调试,我们先启动终端版:

cd /usr/local/frp_0.35.1/
./frps -c ./frps.ini
nohup ./frps -c ./frps.ini &
 # 链接成功会出现如下内容
# 2021/02/04 00:09:17 [I] [root.go:108] frps uses config file: ./frps.ini
# 2021/02/04 00:09:17 [I] [service.go:190] frps tcp listen on 0.0.0.0:7000
# 2021/02/04 00:09:17 [I] [root.go:217] frps started successfully

生产使用中可使用如下命令在后台运行:

nohup ./frps -c ./frps.ini > /dev/null 2>&1 &

2、在内网服务器中启动frpc客户端:#

公网服务器启动成功后,在内网服务器中启动frpc,为了方便调试,我们一样启动终端版:

./frpc -c ./frpc.ini
nohup ./frpc -c ./frpc.ini &
 # 链接成功会出现如下内容
# 2021/02/04 00:11:47 [I] [service.go:290] [64276cca09e4f64c] login to server success, get run id [64276cca09e4f64c], server udp port [0]
# 2021/02/04 00:11:47 [I] [proxy_manager.go:144] [64276cca09e4f64c] proxy added: [ssh]
# 2021/02/04 00:11:48 [I] [control.go:180] [64276cca09e4f64c] [ssh] start proxy success

生产使用中可使用如下命令在后台运行:

nohup ./frpc -c ./frpc.ini > /dev/null 2>&1 &

六、ssh登录服务器#

如果配置成功,在进入本地服务器就相对容易了:

# 标准的ssh命令如下
ssh -p 600x root@xx.xx.xx.xx(公网IP)
 # XShell支持的ssh命令不标准,应该通过如下命令连接,这个命令才会弹出让你保存密钥的浮窗:
ssh root@xx.xx.xx.xx(公网IP) 6000

七、关闭frp进程#

这里以frp客户端为例,frp服务端同理。

1、找到frp进程#

ps -aux|grep frp| grep -v grep
root      3600  0.1  0.1 110188  9484 pts/0    Sl   15:04   0:00 ./frpc -c ./frpc.ini

进程号是3600

2、kill该进程#

# 命令格式:kill -9 <pid>
kill -9 3600

八、配置systemctl来控制frps#

1、创建frps.service#

sudo vim /lib/systemd/system/frps.service

2、在frps.service里添加以下内容#

[Unit]
Description=frps service
After=network.target syslog.target
Wants=network.target

[Service]
Type=simple
#启动服务的命令(此处写你的frps的实际安装目录)
ExecStart=/usr/local/frp_0.35.1/frps -c /usr/local/frp_0.35.1/frps.ini

[Install]
WantedBy=multi-user.target

注意"ExecStart="之后的路径要填写你的frps安装路径(本文以安装到/usr/local/为例)

3、使用systemctl命令来控制frps#

启动frps

sudo systemctl start frps

服务器开机自动启动frps

sudo systemctl enable frps

重启frps

sudo systemctl restart frps

停止frps

sudo systemctl stop frps

查看日志

sudo systemctl status frps

如下图所示,已可以通过systemctl来启动并查看frps的状态


frpc的systemctl配置同理,具体如下小节所示。

九、配置systemctl来控制frpc#

1、创建frpc.service#

sudo vim /lib/systemd/system/frpc.service

2、在frpc.service里添加以下内容#

[Unit]
Description=frpc service
After=network.target syslog.target
Wants=network.target
[Service]
Type=simple
#启动服务的命令(此处写你的frps的实际安装目录)
ExecStart=/usr/local/frp_0.35.1/frpc -c /usr/local/frp_0.35.1/frpc.ini
[Install]
WantedBy=multi-user.target

注意"ExecStart="之后的路径要填写你的frpc安装路径(本文以安装到/usr/local/为例)

3、使用systemctl命令来控制frpc#

sudo systemctl start frpc

服务器开机自动启动frps

sudo systemctl enable frpc

重启frps

sudo systemctl restart frpc

停止frps

sudo systemctl stop frpc

查看日志

sudo systemctl status frpc

十、常见问题#

如果连接不上,建议在命令行启动frp服务端、客户端后观察终端的输出,对报错、警告进行逐一分析。

1、token不匹配#

[root@localhost frp_0.33.0_linux_amd64]# ./frpc -c ./frpc.ini
2020/06/24 15:35:02 [E] [service.go:273] token in login doesn't match token from configuration
2020/06/24 15:35:02 [W] [service.go:101] login to server failed: token in login doesn't match token from configuration
token in login doesn't match token from configuration

解决办法:
(1) 删除或注释掉frp客户端的frpc.ini文件中的token = 12345678
(2) 重启frp客户端

2、[ssh]名被占用#

proxy name [ssh] is already in use

解决办法:
frp客户端的frpc.ini文件中的[ssh]修改为[ssh1]或其他你想要的命名,这只是一个别名而已,所以怎么命名都ok。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,639评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,277评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,221评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,474评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,570评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,816评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,957评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,718评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,176评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,511评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,646评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,322评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,934评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,755评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,987评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,358评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,514评论 2 348

推荐阅读更多精彩内容