====== 折磨的内网穿透指北 ======
--- //[[xiaoran_guo@mail.ustc.edu.cn|Xiaoran Guo]] 2022/11/30 21:15//
为了让搭建在本地的wiki站能实现公网访问,考虑使用内网穿透(intranet penetration)关于实现内网穿透,相关内容网上比较杂,用的软件也五花八门。这里旨在写一个无脑照做保姆级教程,以便日后翻找时有一个能照搬的参考。
===== 实验条件 =====
>校内服务器无静态ip
>使用流量比较小,申请静态ip不合算
>有一台可以校外连接的、常开的电脑作为服务端(拥有公网ip的;抑或是登录了网络通,短时间内不断开,不会重新分配ip地址的机器)
===== 什么是内网穿透 =====
可以将内网上只能本地(局域网)查看的网页发布到公网,让互联网上用户均可以查看的一种手段。
虽然服务器可以连接到网络,但是只能上网,其他用户无法直接访问我们的电脑。这是因为服务器没有公网ip。
在使用校园网的场景下,我们连接校园网的设备相当于连接上了私有地址(局域网分配的IP)。这是由于IPV4能分配的地址有限(4 294 967 296个少的很,得抢),公有IP一票难求,运营商买来的IP通过路由大概是分出来数个私有IP。这个技术 叫NAT(Network Address Translation),即为网络地址转换。快普及IPV6罢!
实际上我们访问的是局域网奇怪,我这不是网上冲浪冲得挺爽吗,其实所谓访问外网,就是通过端口映射(一种NAT技术),把公网IP映射到了内网中一台机器中,给将用户访问IP的这个端口映射到局域网内部的这台机器中。所以我们在使用局域网上网的时候,可以连接到公网,但是公网只能反过来连接内网是不可能的,只能让内网假装成外网。去骗,去偷袭!
需要登录的服务器作为客户端,常开的、有固定公网地址的机器作为服务端。内网穿透相当于用户先与服务端进行通讯,再经由服务端与客户端进行通讯。更详细的我也没学明白,这里不讲了。。。感兴趣可以自己上网查一查。
===== 操作 =====
这里使用frp作为实现工具,为什么:
1.开源
简单来讲就是不想花钱
2.网上案例比较多,好参考
==== 服务端设置 ====
注意服务端是设置再用作跳板的主机上,而非服务器上。本文服务器使用的是Ubuntu系统。只记录该系统的具体操作。
在终端输入:
arch
查看运行架构
这里结果为x86_64,故选择amd64版本。(自己上frp网站查询用什么)
weget命令下载frp:
笔者习惯上安装在"/opt/",应该只要在根目录就行,没有特定要求,可以自定义。
wget https://github.com/fatedier/frp/releases/download/v0.36.2/frp_0.36.2_linux_amd64.tar.gz
解压:
tar -zxvf frp_0.36.2_linux_amd64.tar.gz
把文件改成你喜欢的名字:D
mv frp_0.36.2_linux_amd64.tar.gz frp
进入frp文件夹,重点关注这四个文件:
>frps
>frpc
>frps.ini
>frpc.ini
frps相关的是服务端(frp server),frpc为客户端(frp client)。因为是配置服务端,我们只保留frps相关的内容即可:
rm frpc frpc.ini
选择你喜欢的文本阅读器打开frps.ini,这里使用vim(注意需要使用sudo,否则非用户文件夹的将无法编辑/保存):
sudo vi frps.ini
打开后编辑为如下格式:
[common]
bind_port = 7000 #自定义,需与客户端保持一致
dashboard_port = 7500 #后台管理端口,同样自定义,注意不要端口冲突
token = 666666 #与客户端配对的口令,需保持一致
dashboard_user = admin #登录管理端口的用户名
dashboard_pwd = password #登录管理端口的密码
# vhost_http_port = 80 #反向代理相关,可选,这里不用就注释掉
# vhost_https_port = 443 #同上
上述参数自定义为自己想用的,保存文件。
试运行frps服务端:
./frps -c frps.ini
若错误请检查上述步骤及语法;若显示''start frps success'' 可以判断服务端一切正常。并不完全能!**服务端也许会出现frp运行无报错,但是端口却无法访问的情况。**__该问题截至本次编辑未能解决,怀疑是端口未成功开启,防火墙?交换机?问题未排除__FIXME
当然也有可能你没有出现这个问题,判据如下:
若能访问''X.X.X.X:7500''(X.X.X.X为服务端ip),输入用户名密码,进入管理面板,则说明端口开启你没有出现问题。可以继续配置客户端的frp。
==== 客户端配置 ====
服务器同是Ubuntu系统
依葫芦画瓢,参照服务端设置,把frp装在''/opt/frp''目录下。
这次我们只保留'' frpc frpc.ini '':
rm frps frps.ini
打开frps.in,编辑并保存成如下格式:
[common]
server_addr = X.X.X.X #服务端ip
server_port = 7000 #服务端转发端口,与前文保持一致
token = 666666 #配对口令,同样保持一致
[web]
type = tcp #我只知道这里该填tcp :-(
local_ip = 127.0.0.1 #内网机器ip,一般本项为默认值,无需修改
local_port = 80 # 本地应用的端口号,按照实际应用工作在本机的端口号填写即可
remote_port = 8080 #内网需要监听的端口
type一栏是配置类型协议,有http,https等可选
我很想解释为什么选tcp,但我太菜了
试运行:
./frpc -c frpc.ini
成功将会观察到''start proxy success''等字样
===== 配置成功? =====
好耶,上述流程都走完了,你成功配置了内网穿透!现在开始可以用公网访问咯? XD真的有那么简单吗,科大拦截了你的网页,并要求你去备案:-(
===== 解决方案 =====
1.老老实实去搞静态ip 这不是废话吗
2.去整一个公网ip的VPS专门做转发(比如阿里、腾讯?价格没有了解过,要是便宜可以考虑)
3.直接通过wvpn.ustc.edu.cn访问校内网站 可这不就代表之前都白折腾了吗?
4.按照拦截页建议去找网络安全中心报备。流程未知m(