1.操作系统


Deepin - 基于Linux的开源国产操作系统(软件生态好,缺点不够流畅)

官网
Ubuntu | 全球领先的用于个人电脑、平板及手机的操作系统

我使用的版本
Ubuntu乌班图-桌面办公基本不用想了,优点流畅

2.内网穿透原理

ngrok - 下载

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.下载对应版本的客户端

Sunny-Ngrok内网转发

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 端口号
如果请求成功,那么恭喜你成功内网穿透!

3.参考文献

(9条消息) 使用frp配置内网访问(穿透)教程(超详细,简单)_*Lisen的博客-CSDN博客_frp

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐