想法产生
主机一般都放在宿舍内的,想要从其他地方访问宿舍内的服务器非常的不方便,但是又奈何宿舍宽带很难申请公网IP,所以才会想到用内网穿透的方式实现对宿舍内主机的访问。
notes
- 宿舍内都是局域网,连接到的校园网wifi或者宽带分配的IP都会随着重新连接产生变动,所以在此会使用到DDns技术。ddns就是把一个动态变化的IP地址和一个不变的域名绑定在一起,直接访问这个域名就可以实现访问到这个变化的IP地址的作用。
- 花生壳免费版会赠送一个域名,可以直接实现内网穿透,比较简便;
- frp适合有一个公网IP,然后通过公网IP的转发实现内网穿透。
在此之前,请确保已经安装openssh-server!!!
花生壳实现
大致流程
- 在花生壳官网上面下载linux版本的客户端;
- 安装完成之后在终端中输入:
sudo phddns start
sudo phddns enable
sudo phddns status
然后会出现一个SN码,这个SN码就相当于这个主机的ID,然后在花生壳官网上使用SN码进行登录,密码默认是admin
通过sn登录之后再绑定到注册的花生壳帐号上;再到花生壳内网穿透界面去添加映射,内网地址填127.0.0.1或者是自己的局域网地址好像我都实验成功过。
都设置好之后可以在映射旁边又一个诊断按钮,可以看是否成功了。
在进行ssh连接的时候只需要ssh -o 12345 your_name@xxxxxx.xx
就行了;
12345是你的映射上的外网端口,your_name是你的内网的用户名,xxxx.xx是你的域名
可能会出现的问题
首先请查看官方文档
第一步的内网服务和花生壳服务器连接不上
你可以phddns status
检查一下他是OFFLINE还是ONLINE的状态,遇到OFFLINE就需要重启服务
等到他变成ONLINE之后,在检查花生壳网站上的最右上角的头像,鼠标悬浮就能看到有一个状态,状态若是离线,但是phddns又是ONLINE,就退出重新登录一下就好了。
同时可以看看左边边栏上有一个设备管理。
frp实现
访问frp的github仓库releases页面:https://github.com/fatedier/frp/releases
frp的官方文档:https://gofrp.org/zh-cn/docs/overview/
通过 SSH 访问内网机器
步骤
在具有公网 IP 的机器上部署 frps
部署 frps 并编辑 frps.toml 文件。以下是简化的配置,其中设置了 frp 服务器用于接收客户端连接的端口:
bindPort = 7000 log_file = /var/log/frps.log
在frps中添加上日志文件的位置/var/log/frps.log,方便查看。
这里还支持dashboard,prometheus监控等功能。 参考配置:https://cloud.tencent.com/developer/article/1837482
[common] # frp监听的端口,默认是7000,可以改成其他的 bind_port = 7000 # 授权码,请改成更复杂的 token = 52010 # 这个token之后在客户端会用到 # frp管理后台端口,请按自己需求更改 dashboard_port = 7500 # frp管理后台用户名和密码,请改成自己的 dashboard_user = admin dashboard_pwd = admin enable_prometheus = true # frp日志配置 log_file = /var/log/frps.log log_level = info log_max_days = 3
在需要被访问的内网机器上部署 frpc
部署 frpc 并编辑 frpc.toml 文件,假设 frps 所在服务器的公网 IP 地址为 x.x.x.x。以下是示例配置:
serverAddr = "x.x.x.x" serverPort = 7000 [[proxies]] name = "ssh" type = "tcp" localIP = "127.0.0.1" localPort = 22 remotePort = 6000
localIP
和localPort
配置为需要从公网访问的内网服务的地址和端口。remotePort
表示在 frp 服务端监听的端口,访问此端口的流量将被转发到本地服务的相应端口。
启动 frps 和 frpc
在客户端上要用sudo ./frpc -c frpc.toml
,如果不使用sudo代码会出现一些错误。
可以使用systemd对frps进行管理:
sudo mkdir -p /etc/frp
sudo cp frps.toml /etc/frp
sudo cp frps /usr/bin
sudo cp systemd/frps.service /usr/lib/systemd/system/
sudo systemctl enable frps
sudo systemctl start frps
记得放开防火墙和安全组对应的端口(remotePort, serverPort, dashboard_port)
参考配置:
# 客户端配置
[common]
server_addr = 服务器ip
server_port = 7000 # 与frps.ini的bind_port一致
token = 52010 # 与frps.ini的token一致
# 配置ssh服务
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000 # 这个自定义,之后再ssh连接的时候要用
# 配置http服务,可用于小程序开发、远程调试等,如果没有可以不写下面的
[web]
type = http
local_ip = 127.0.0.1
local_port = 8080
subdomain = test.hijk.pw # web域名
remote_port = 自定义的远程服务器端口,例如8080
通过 SSH 访问内网机器
使用以下命令通过 SSH 访问内网机器,假设用户名为 test:
ssh -o Port=6000 test@x.x.x.x
frp 将请求发送到
x.x.x.x:6000
的流量转发到内网机器的 22 端口。注意是服务器的用户名和IP地址。
参考文章:https://www.cnblogs.com/betterquan/p/11966303.html