====== 折磨的内网穿透指北 ====== --- //[[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(