1.操作系统
Deepin - 基于Linux的开源国产操作系统(软件生态好,缺点不够流畅)
官网
Ubuntu | 全球领先的用于个人电脑、平板及手机的操作系统
我使用的版本
Ubuntu乌班图-桌面办公基本不用想了,优点流畅
2.内网穿透原理
1.核心思想
内网穿透的核心思想就是“映射”和“转发”,把内网设备的端口映射到公网设备的端口上,来进行流量转发。
简单地画一下示意图如上,基础设施由两个核心设备组成:
服务端:拥有公网IP的设备一台,即上图“公网服务器”,开放2个端口7000和6000,用于公网通信。
客户端:要访问的内网设备一台,即上图“内网家用电脑”,开放实际应用服务所需的端口(比如ssh服务,默认22端口),并将配置的公网映射端口6000告知服务端。所以服务端开放的那个端口6000实际上是客户端告诉它的。
(以上端口除22以外均为自定义端口,无特
殊含义。)
2.内网穿透原理和常用方法
既然内网主机不能直接访问,那就在公网弄个服务器。
因为内网主机可以访问公网主机,然后将内网主机和公网主机进行连接,并且保持连接。
如果公网主机接收到的请求,通过链接转发给内网主机即可。
将内网服务进行公网映射,服务通常从端口提供服务,例如:
-
ssh服务,端口好似22
-
web服务,端口是80和443
-
远程桌面服务,端口是3389,win专业版支持远程桌面
-
redis服务,端口是6379
-
jellyfin视频站,端口是8096
-
我的世界 游戏服务,端口是25565
参考文献:(15条消息) 内网穿透原理和实现思路介绍_布啦豆的博客-CSDN博客_内网穿透原理
3.使用ngrok-ittun穿透部署
解压 并复制文件到/usr/local/bin目录下
sudo tar xvzf ~/Downloads/ngrok-v3-stable-linux-amd64.tgz -C /usr/local/bin
1. 安装ngrok
curl -s https://ngrok-agent.s3.amazonaws.com/ngrok.asc | sudo tee /etc/apt/trusted.gpg.d/ngrok.asc >/dev/null && echo "deb https://ngrok-agent.s3.amazonaws.com buster main" | sudo tee /etc/apt/sources.list.d/ngrok.list && sudo apt update && sudo apt install ngrok
snap install ngrok
若提示 snap不是可执行的命令,则先安装snap
sudo apt update
sudo apt install -y snapd
登录 https://dashboard.ngrok.com/ 注册一个账户,获取你的token。
注意:验证码是谷歌的服务不开vpn出不来。
账号注册成功后你会收到一份邮件,点击邮件中的链接验证身份。(必须,否侧ngrok不给你代理)
添加你的token
ngrok config add-authtoken <token>
2.开通一个端口通道
开通http端口通道,映射本机80端口(用于web网络服务)
ngrok http 80
打开 22 端口TCP转发,并指定公网服务器地区(用于ssh连接)
ngrok tcp 22 --log=stdout > "$HOME/ngrok.log" --region ap &
其中 region 的 ap 代表 ngrok 新加坡节点,访问速度相比美国节点会快一些。访问 https://ngrok.com/docs#config-options 可以查看支持的所有区域。
不指定地区默认是jp日本。同一账号下,同一地区只能有一个会话。(开启订阅无限制)
4.使用sunny-ngrok穿透
准备:
先去官网注册账号,2块钱完成实名认证。官网
开通你需要的隧道规格服务。
完成后,在这个页面会出现你开通的隧道。拿到你的隧道ID
1.下载对应版本的客户端
sudo mv sunny /usr/local/bin/sunny
sudo chmod +x /usr/local/bin/sunny
2.启动隧道
Mac、Linux、树莓派的使用方式是一样的。Windows才会不一样。但是它们的启动方式都是通过隧道id启动,隧道id可以在隧道管理的列表里面获得。这里以映射http服务为例。
./sunny clientid 隧道id
启动多个隧道
./sunny clientid 隧道id,隧道id
要想后台运行可以使用 setsid 命令(会话断开不会杀死隧道进程)
setsid ./sunny clientid 隧道id &
3.开机自启
编写启动脚本
sudo vim /etc/init.d/sunny
#!/bin/sh -e
### BEGIN INIT INFO
# Provides: ngrok.cc
# Required-Start: $network $remote_fs $local_fs
# Required-Stop: $network $remote_fs $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: autostartup of ngrok for Linux
### END INIT INFO
NAME=sunny
DAEMON=/usr/local/bin/$NAME
PIDFILE=/var/run/$NAME.pid
[ -x "$DAEMON" ] || exit 0
case "$1" in
start)
if [ -f $PIDFILE ]; then
echo "$NAME already running..."
echo -e "\033[1;35mStart Fail\033[0m"
else
echo "Starting $NAME..."
start-stop-daemon -S -p $PIDFILE -m -b -o -q -x $DAEMON -- clientid 隧道id || return 2
echo -e "\033[1;32mStart Success\033[0m"
fi
;;
stop)
echo "Stoping $NAME..."
start-stop-daemon -K -p $PIDFILE -s TERM -o -q || return 2
rm -rf $PIDFILE
echo -e "\033[1;32mStop Success\033[0m"
;;
restart)
$0 stop && sleep 2 && $0 start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac
exit 0
把代码里面的【隧道id】替换成自己的隧道id
sudo chmod 755 /etc/init.d/sunny
sudo /etc/init.d/sunny start
sudo /etc/init.d/sunny start #启动
sudo /etc/init.d/sunny stop #停止
sudo /etc/init.d/sunny restart #重启
Ubuntu、树莓派、Debian系列的系统
cd /etc/init.d
sudo update-rc.d sunny defaults 90 #加入开机启动
sudo update-rc.d -f sunny remove #取消开机启动
5.使用公网IP服务器,搭建frp内网穿透环境。
1.服务端
1.下载frp库:
建议去官网,之前在别人博客下的发现有挖矿病毒!
2.解压frp压缩包
tar -zxvf frp_0.33.0_linux_amd64.tar.gz
3.进入解压目录
cd frp_0.33.0_linux_amd64/
4.修改配置文件
vi frps.ini
配置文件内容
[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
5.设置启动frp服务
注册服务加入开机自启
sudo mkdir -p /etc/frp
sudo cp frps.ini /etc/frp
sudo cp frps /usr/bin
sudo cp systemd/frps.service /usr/lib/systemd/system/
sudo systemctl enable frps
sudo systemctl start frps
6.防火墙开放
ufw allow 7000
ufw allow 7500
7000和7500两个端口分别对应frps.ini配置中的bind_port和dashboard_port
7. 验证服务端是否启动成功
访问:http://服务器IP:后台管理端口” ,输入用户名和密码可以查看连接状态
如:1.117.90.135:7500/,用户名和密码分别对应frps.ini文件中的dashboard_user和dashboard_pwd
如果上述步骤没有问题,则说明frp的服务端配置成功了,也就意味着内网穿透你已经成功了一半.
2.客户端
1.进入解压目录
cd frp_0.33.0_linux_amd64/
2.修改配置文件
vi frpc.ini (注意哦,不是frps.ini)
配置文件内容
# 客户端配置
[common]
server_addr = 服务器ip
# 与frps.ini的bind_port一致
server_port = 7000
# 与frps.ini的token一致
token = 52010
# 配置ssh服务
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
# 这个自定义,之后再ssh连接的时候要用
remote_port = 6000
# 配置http服务,可用于小程序开发、远程调试等,如果没有可以不写下面的
[web]
type = http
local_ip = 127.0.0.1
local_port = 8080
# web域名
subdomain = test.hijk.pw
# 自定义的远程服务器端口,例如8080
remote_port = 8080
3.防火墙开放
ufw allow 7000
ufw allow 7500
4.客户端开机自启
sudo mkdir -p /etc/frp
sudo cp frpc.ini /etc/frp
sudo cp frpc /usr/bin
sudo cp systemd/frpc.service /usr/lib/systemd/system/
sudo systemctl enable frpc
sudo systemctl start frpc
5. 测试穿透是否配置成功
ssh 用户名@服务端ip -p 端口号
如果请求成功,那么恭喜你成功内网穿透!