Bootstrap

内网穿透问题

Q:实验室的服务器只在局域网内部使用,需要进行内网穿透ssh

内网穿透是一种网络通信技术,它允许从外部网络(如互联网)访问位于内网(局域网)中的服务或设备。内网通常是封闭和保护的,直接从外部网络无法访问。内网穿透技术通过建立一条安全的通道,使得外部网络能够与内网中的资源进行通信。

内网穿透的“是什么”:

  1. 网络环境:内网通常指的是一个组织内部的网络,比如公司、学校或家庭的局域网。这些网络通常不直接暴露在互联网上,以保护内部数据和设备的安全。
  2. 访问限制:由于内网的封闭性,外部网络无法直接访问内网中的资源。例如,如果你在家里搭建了一个网站服务器,你的朋友在外面是无法直接访问的。
  3. 技术实现:内网穿透技术通过在内网和外网之间建立一个安全的通道来实现通信。这通常涉及到端口映射、VPN、SSH隧道、反向代理等技术。

为什么需要内网穿透:

  1. 远程工作:在疫情期间,许多人需要远程访问公司内网中的资源,如文件服务器、数据库或内部网站,以继续工作。
  2. 家庭网络访问:你可能需要在外出时访问家中的网络摄像头、NAS(网络附加存储)或其他智能家居设备。
  3. 开发和测试:开发者可能需要从外部网络访问在本地运行的开发服务器,以进行调试和测试。
  4. 服务部署:如果你在内网中部署了服务(如网站、游戏服务器等),你可能希望朋友或客户能够从外部网络访问这些服务。
  5. 维护和支持:技术支持人员可能需要远程访问客户的内部网络设备,以提供远程协助和故障排除。
  6. 避免公共IP成本:传统的内网服务对外访问可能需要一个公共IP地址,这可能涉及额外的成本。内网穿透技术可以利用现有的互联网连接,无需额外的公共IP地址。
  7. 安全性:内网穿透技术通常提供加密连接,确保数据传输的安全性,防止数据在传输过程中被截获或篡改。

只看TCP

1,使用ngrok:TCP暂时不行

ngrok内网穿透

参考https://dashboard.ngrok.com/get-started/setup/linux

按照指示:

其中authtoken在:

之后参考:

https://zj-network-guide.readthedocs.io/zh-cn/latest/intranet-penetration/ngrok/[%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F]ngrok%E5%AE%9E%E7%8E%B0/

(1)ngrok tcp $port

valid credit or debit card有效的信用卡或借记卡

但是不支持国内的银行卡,

目前想办法handle一张国外银行借记卡,未果,暂时待处理中

(2)ngrok http:

其实没有用,因为只有tcp隧道可以用于ssh,http隧道无关!!!!!!!

参考https://zj-network-guide.readthedocs.io/zh-cn/latest/intranet-penetration/ngrok/[ngrok]TCP%E5%92%8CHTTP%E8%BF%9E%E6%8E%A5%E9%85%8D%E7%BD%AE/

以及参考

https://github.com/zyzlaozhang/use_the_ngrok

ngrok http 80

点击进入该网址之后:

https://ngrok.com/docs/errors/err_ngrok_8012/

internet:网络

ngrok edge:ngrok官网云端服务器

ngrok agent:客户端/代理,实际上已经在服务器上安装了

https://ngrok.com/docs/agent/

https://tonybai.com/2015/05/14/ngrok-source-intro/

当然要确保监听端口正确

2,其他内网穿透工具:
参考https://github.com/SexyBeast233/SecBooks/blob/main/%E3%80%90%E5%86%85%E7%BD%91%E7%B3%BB%E5%88%97%E3%80%91intranet/%E6%9C%80%E5%A5%BD%E7%94%A8%E7%9A%84%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F%E5%B7%A5%E5%85%B7%E5%90%88%E9%9B%86.md

首先是frp,即https://github.com/fatedier/frp

server A(frps):有公网IP,目前是尝试本地win或者是Guo centos服务器上

server B(frpc):无公网IP,也就是C107的服务器

(1)server A上:frps

bindPort是frpc客户端连接的端口,默认是7000端口,需要将bioinfor1服务器的防火墙放开7000端口

①如果选用7000 port,该port是否已经打开

如果防火墙没有打开,需要在bioinfor1上执行:

②选用其他已经打开的port,如何查看服务器上防火墙开放了哪些端口

使用iptables等

同时注意查看在frpc上可用于通信的端口:其实就是哪些端口可以用于设置上面的bindPort

netstat -tulnp | grep 7000
#要查看所有开放的端口
t:显示TCP端口
u:显示UDP端口
l:显示监听状态的端口
n:显示数字形式的端口号和地址
p:显示监听端口的进程ID和名称

(2)在server B上:frpc

首先frps中的bind_port和此处frpc中的serverport相同,即7000,

然后serverAddr就是填写frps中的公网ip地址;

至于localIP和localPort,是因为我需要访问的就是配置了frpc的这台服务器,所以只需要回环地址就可以了,除非是第三台设备

remoteport自己定义,用于后续ssh连接,但是这个端口也要在bioinfor1中打开防火墙

此处定义为6000,同样找个没有被占用的端口即可

最后只需要在bioinfor1中运行

注意使用Server端(中转服务器)的6000端口。使用client端(实验室服务器)的用户名@server端的公网IP

最终成功效果如下:

(3)设置一直运行:

①使用tmux或者是nohup

参考https://mp.weixin.qq.com/s/2j1J-w59joQf6TO0JtWaqA

分别在实验室服务器client端上tmux frps后台运行,公网服务器server端上tmux frp后台运行

分别在两个tmux 中设置会话即可

然后将server端的该ssh命令写在~/.bashrc上,使用frp的alias

(后面略)
效果如下:

②系统设置自动启动

参考https://mp.weixin.qq.com/s/TbAF2XYDOTPoyir5R6hF8w

使用systemd启动:

修改一下ExecStart即可,但是没有sudo权限,所以server端上还是使用nohup算了

对于client端:

在client端上可以设置为开机自启动,但是server端上不能(server端上没有sudo权限,虽然可以申请):
现在测试一下,如果client端设置为开机自启动,那么server端怎么操作方便:
1,在server端上每次登入都执行一次frps

失败,疑似client端还是要运行一下frpc

2,还是在server端上使用nohup或者是tmux

也就是上面的①

3,理想是client以及server端都系统设置

③可以试一下frpc的桌面客户端app:C

https://mp.weixin.qq.com/s/iaoaXhj25s_2VbMjsg_LsQ

其他细节参考https://blog.csdn.net/jiuweideqixu/article/details/120167410

综上:

**client端以及server端都tmux开启放在后天(或者sudo系统设置)+登入设置上可以加一些token安全措施(可以参考frp相关博客)
在server端上只要登入sjtu的vpn+frp的alias即可 **

;