目录

折磨的内网穿透指北

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(