计算化学公社

 找回密码 Forget password
 注册 Register
Views: 3000|回复 Reply: 6
打印 Print 上一主题 Last thread 下一主题 Next thread

[集群维护] frp组建隧道以便ssh登陆服务器

[复制链接 Copy URL]

81

帖子

1

威望

220

eV
积分
321

Level 3 能力者

跳转到指定楼层 Go to specific reply
楼主
本帖最后由 hgyhgy 于 2022-4-30 22:49 编辑

这个事情,搞了足足一天才能弄好!还长时间全无头绪!网上的参考容易出问题。本来是十分简单的。
首先要购买一个腾讯的轻量云服务器,我选了一个centos。

在云服务器的防火墙页面,把全部端口打开。(只打开7000可能也足够)搜索安全组,把所有端口都暴露。(可能只需要暴露7000d端口)

在云服务器与要登陆的内网服务器中,下载frp。
wget https://github.com/fatedier/frp/ ... _linux_amd64.tar.gz

然后
tar zxf frp_0.42.0_linux_amd64.tar.gz

进入目录,运行
nohup ./frps -c ./frps.ini &>/dev/null&

在内网服务器,也同样解压缩
vi frpc.ini
把服务器的ip地址(server_addr =)改成云服务器的公网ip地址。
然后运行
nohup ./frpc -c ./frpc.ini &>/dev/null&

然后在自己的电脑
使用
公网ip,以及6000端口正常ssh登陆即可。

本来这些都是很简单的。
但我最开始参考了一个建立服务来启动frp的网页。
frp配置内网穿透教程(超详细) - 云+社区 - 腾讯云 (tencent.com)
如果建立了那个服务来启动frp, 就会出现connection refused的提示,frp的log显示一切正常。frps和frpc服务状态都一切正常,但无论如何就是登陆不进去。
这个问题是十分奇怪。
即使把服务停止了,重新直接运行上面的命令,也无法成功ssh登陆。
最终,我是把原来的frp都删除干净,把frp相关的进程都kill掉,重新解压缩,采取最简配置,才能成功ssh登陆。其实,我早就怀疑可能是这个服务启动的方式了,也试过把它disable和stop的了,但无效,原因未明。看来会恢复干净的初始状态是十分重要的,尤其是缺乏这方面的经验的时候。
此外,那个防火墙和安全组,也要打开,许多参考网页,只提到了防火墙,并没有提到安全组,只有很少的网页提到这个事情。
对于云服务器,在linux底下,不必输入任何其他命令打开端口。
按我上面的最简做法,是能正常登陆的。在此基础上,可以添加其他功能。出问题了,要注意恢复初始的干净状态,重新来过。
奇怪的是,那么多人使用腾讯云,阿里云来frp,但为何多数只提到防火墙规则,很少提到安全组的端口暴露?  难道是他们之前多数都已经设好安全组的了?这是一个常识?














18

帖子

2

威望

397

eV
积分
455

Level 3 能力者

7#
发表于 Post on 2024-1-6 06:29:09 | 只看该作者 Only view this author
hgyhgy 发表于 2022-6-9 17:26
我最后采取了,在目标服务器那里使用服务注册的方式,但在中转服务器(腾讯云那里)采取直接运行的方式,就 ...

这里nohup运行我的理解在于你的云服务器一直开着,所以问题不大。
但是要是出现意外导致云服务器被删了或者关掉了,亦或者内存满了这种情况,服务器就会关掉。这时候就断了。

81

帖子

1

威望

220

eV
积分
321

Level 3 能力者

6#
 楼主 Author| 发表于 Post on 2022-6-9 17:26:21 | 只看该作者 Only view this author
我最后采取了,在目标服务器那里使用服务注册的方式,但在中转服务器(腾讯云那里)采取直接运行的方式,就是nohup背景运行的方法。结果是nohup运行,也是能稳定运行。不必注册为服务。

但在目标服务器,就有必要注册为服务了,不然重启或者错误杀了frpc, 就会导致断联了。

81

帖子

1

威望

220

eV
积分
321

Level 3 能力者

5#
 楼主 Author| 发表于 Post on 2022-5-2 09:24:39 | 只看该作者 Only view this author
本帖最后由 hgyhgy 于 2022-5-2 15:29 编辑
Entropy.S.I 发表于 2022-5-1 00:32
你所说的的操作有很多地方应该马上改进,涉及到安全问题。另外,感觉你对FRP这个工具的原理没有理解,建议 ...

将frp注册为服务,确实是无法进行连接。也确实是centos的系统。
而关闭selinux, 会导致ssh登陆不了(在目标服务器)。我不明白为何会出现这种现象。关于如何关闭selinux的很多网站都没有提及这个现象。
比如我使用setenforce 0临时关闭selinux, ssh连接是不会立刻断掉,但退出ssh后,重新连接ssh,就无法登陆了。直到过一段时间之后,系统自己重新把slinux开启之后(我估计能重新ssh连接的原因是因为这个),ssh的连接才能恢复。
比如新建账号时,就要临时关闭selinux, 然后再开启selinux。
是否有不关闭selinux,也能使用服务注册frp的方式?
使用服务注册的方式,frp的一切运行状态和日志都是显示正常的,但就是不能连上,出现connection refused的问题。在云服务器frps和frpc之间的连接也是正常,在日志中显示成功登入。


后来,我建立了虚拟网络。使用的是tailscale客户端和headscale服务端。据说是基于wireguard的vpn。taiscale客户端本身免费。taiscale服务端不免费,但有开源免费的替代版本headscale服务端。按https://blog.csdn.net/easylife206/article/details/123861092进行安装和设置,可以成功运行。

我不太明白这个端口暴露。既然机器没有提供其他服务,自然也就没什么密码可以登入,就算端口暴露,应该也没有密码可以破解,然后能够登入吧?开放一个和开放多个,究竟有何区别?



31

帖子

0

威望

1443

eV
积分
1474

Level 4 (黑子)

4#
发表于 Post on 2022-5-1 14:18:40 | 只看该作者 Only view this author
赞同楼上的说法,应该只开放相关的端口,且开启防火墙,ssh也应该该用密钥登录。这都是最基本的。对外暴露端口的机器只应该是用来登录的跳板机。
也可以参照楼上所说的虚拟网络方法。
如果嫌麻烦,可以把协议从TCP改成“STCP & SUDP”要求在被访问服务的机器上以及要访问的用户的机器上都部署上 frp 的客户端。相比直接TCP要好一点。

2302

帖子

1

威望

5481

eV
积分
7803

Level 6 (一方通行)

3#
发表于 Post on 2022-5-1 08:17:37 | 只看该作者 Only view this author
本帖最后由 abin 于 2022-5-1 08:27 编辑

大概理解一下....

机器所具有的网络是:

PC  ---->  tencent <----- Linux
也就是说, Linux可以单向访问互联网....

最古老的方案是,
ssh隧道转发(?, 不太记得这个说法了) . Linux---> tencent ; 而后PC机上 ssh tencent, 会自动跳到Linux.
你可能需要一个脚本挂到systemd里面去, 以免失联.

另一个相对简单的是,
wireguard: 反正哪一台机器都可以访问tencent,那么问题就解决了....

https://omniedge.io/download  这个其实更为好用,,,不过开发者似乎说, not for China.

总的来说, 不建议FRP, 当心死很惨. (修改一下,这个说法不恰当). 如果你的ssh是配合key来登录的, 并且关闭了密码方式, 那么还是很安全的. 全程使用ssh key基本可以裸奔了....
前提是, 仅仅开启ssh使用的私有端口, 其他都关闭.

评分 Rate

参与人数
Participants 1
eV +3 收起 理由
Reason
hgyhgy + 3 被你说对了,我把frpc kill掉,想重新配置.

查看全部评分 View all ratings

High-Performance Computing for You
为您专属定制的高性能计算解决方案

更多讯息,请访问:
https://labitc.top
http://tophpc.top:8080
电邮: ask@hpc4you.top

846

帖子

16

威望

4653

eV
积分
5819

Level 6 (一方通行)

小屁孩

2#
发表于 Post on 2022-5-1 00:32:51 | 只看该作者 Only view this author
本帖最后由 Entropy.S.I 于 2022-5-1 00:35 编辑

你所说的的操作有很多地方应该马上改进,涉及到安全问题。另外,感觉你对FRP这个工具的原理没有理解,建议至少仔细看看FRP开发者给的文档。

下面是我的建议:

1. 绝对不能在防火墙中设置放行所有端口,这将使你的云服务器彻底暴露于互联网攻击之下。正确的做法是尽可能少地开放端口,尽可能不开放RDP、SSH、FTP、VNC等服务的默认端口,必须使用时临时开放即可。可能你对网络攻击没有切身体会,可以去问问做网安,或搞IDC运维的朋友,现在互联网攻击有多恐怖。我作为普通带学生,管着自己的5条公网线路和十几台公网服务器,已经深刻感受到网络攻击的凶险,每条线路每天都会被扫n次端口,只要开放任何一个端口并指向后端的SSH、RDP等服务,在一天之内必然遭到多轮弱口令攻击(暴力破解密码),开放的http/https服务随时都在受到SQL注入攻击(由于还没对外宣传过,所以目前没有遇到DDoS)。

2. FRP的TCP监听端口默认是7000,用于接收FRPC的连接。除了开放TCP监听端口,还应该开放需要转发的端口,以及可选功能对应的端口(例如Dashboard)。

3. 非常不建议直接暴露SSH服务,更安全、优雅的做法是使用虚拟专用网络。标准方案:用云主机作为反向代理服务端,用软路由作为内网网关,在网关上建立OpenVPN服务和FRPC服务,只对OpenVPN的端口使用FRP进行穿透,然后把OpenVPN配置为非全局代理,在用于访问内网服务器的终端设备上通过OpenVPN连接内网。以上也是我给自己家以及我所在的课题组机房配置的方案。若没有条件使用软路由,也可用更简单的方法,即:使用云主机作为OpenVPN服务器,让要被访问的内网服务器作为客户端,并长期连入VPN。

4. 用Systemctl将FRP注册为服务是正确、规范的做法,也是FRP开发者提倡的方法。用nohup简单粗暴地运行不是生产环境应该有的操作,因为没有守护机制,进程异常终止后无法自动重启。以Sytemctl方式运行后外部访问被拒绝是因为CentOS有SELinux防护机制,这种防护对普通用户基本没有用,关掉即可。用Ubuntu Server或Windows Server无此问题。

评分 Rate

参与人数
Participants 1
eV +3 收起 理由
Reason
hgyhgy + 3 我试试减少开放的端口,看看功能是否依然正.

查看全部评分 View all ratings

- 向着虚无前进 -

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2024-11-27 08:04 , Processed in 0.217133 second(s), 23 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list