WSL中的虚拟IP地址说明
我们在wsl中编写好streamlit程序,比如命名为ui.py,通过下述指令运行的时候:
streamlit run your_script.py
wsl会启动web服务器,并给出两行网址
这两行网址,表示应用可以通过浏览器进行访问,但是我们所看到的Network URL属于是WSL中的虚拟网络接口,通常与Windows主机上的IP地址是不一样的,是WSL给它分配的一个内网地址,这个地址仅限于在 WSL 或 Windows 中使用。其它设备或浏览器是无法直接访问它的,即便是在同一个局域网内,我们这边是想通过公网访问,但我们可以首先先实现在局域网内能够成功的访问它。
局域网访问
防火墙设置
首先,我们要先确定,防火墙的设置,因为防火墙的设置会导致我们的端口无法被外部设备所访问,第一步,Win + R,输入 firewall.cpl
,回车,会打开如下界面:
我们点击左侧的高级设置,选择其中的入站规则,会出现如下界面
这里我们选择右侧的新建规则,然后选择端口,点击下一页,选择特定本地端口,并且是TCP,从之前wsl给的网址可以看出,端口是8501,所以在特定端口那个地方,输入8501,点击下一步,然后选择允许连接,配置文件那边,域,专用,公用,都勾选,然后命名,注意命名一定要规范,不要随便命名,因为后面需要查找这个规则的,我这边因为项目是调用ai界面,所以命名为允许streamlit调用ai。成功后,可以在入站规则的列表中查询到。这样即便以后不想用了,知道这个名字,也可以随时删除掉这个规则。
防火墙这个规则完成后,记得重启下streamlit服务器,确保这个规则能够实施。
WSL端口隐射到window中
WSL绑定地址
在wsl的终端运行ui.py(也就是streamlit程序)的时候,输入命令:
streamlit run ui.py --server.address 0.0.0.0
这个命令将 Streamlit 的服务器绑定到 0.0.0.0
地址,意味着它将接受来自任何 IP 地址的请求,而不仅仅是本机的 localhost
地址。
在 Windows 里设置端口转发
首先先在wsl的终端输入如下命令:
ip addr
会显示出一堆信息,这里面包含了你的wsl的ip地址(如果不会看的话,直接全部复制到ai,让他帮你看)
我这边的WSL的ip是172.29.118.79。
接着打开powershell以管理员身份,输入指令:
netsh interface portproxy add v4tov4 listenport=8501 listenaddress=0.0.0.0 connectport=8501 connectaddress=172.29.118.79
这行代码的意思就是添加一个新的端口转发规则v4tov4,这个规则会监听8501端口,0.0.0.0表示会监听所有设备对该端口的请求,并且将信息转发到IP地址为172.29.118.79的8501端口上面(也就是我们WSL中所运行的streamlit程序)。
如果不小心,某个地方写错了,也不要慌,直接通过指令将其删掉即可:
netsh interface portproxy delete v4tov4 listenport=8501 listenaddress=0.0.0.0
在添加完规则后,我们可以查看该规则是否生效了,
输入netsh interface portproxy show all
出现该界面也就是规则成功生效了。
在wsl终端输入指令,查看程序是否在运行:
ss -tulnp | grep 8501
这样基本上就成功完成了端口的映射。
在局域网实现
先在powershell中输入ipconfig,查看本机的ipv4地址
这样你的网站的网址就是http://192.168.27.174:8501
将这个网址发送到同一个局域网内所连接的设备上,手机也好,平板也好,都可以打开。这样局域网内访问也就实现了。
公网访问
我们现在在局域网上面已经可以成功的访问了, 但如果要想让连接在不同的WiFi上面的设备也能够访问这个网站,我们需要达到公网访问,这就需要内网穿透。
内网穿透
内网穿透(NAT穿透)是指通过某些技术手段,使得外部网络可以访问到位于 内网(如家庭局域网、企业局域网等)中的设备或服务。由于内网通常使用的是私有IP地址(如 192.168.x.x
, 10.x.x.x
),这些IP在公网中是无法直接访问的,因此需要一些技术来“穿透”这个内网隔离的墙,实现外部对内网服务的访问。
内网:手机热点,家庭网络或公司网络中使用的局部网络,使用私有IP地址,这些IP地址不能在公网中直接访问。
外网:通常指的是互联网,使用公网IP地址。
穿透:外部的请求可以“穿过”内网和防火墙,访问到内网中的服务器或设备。
要实现内网的穿透,我们可以使用一些专门的APP比如NatApp。当然这个只是临时的,想要长期的话,是需要申请专门的公网iP。
NatApp
首先我们登入NatApp官网:
NATAPP-内网穿透 基于ngrok的国内高速内网映射工具
在官网中,我们可以购买一个免费的隧道,并且下载它的客户端到指定的文件下,下面:
我这边下载到了 D:\ngrok下面,在我的隧道中查看刚刚所购买的隧道的密钥authtoken,将其复制下来,然后在终端D:\ngrok输入指令:
./natapp -authtoken 你的authtoken
便出现下面的界面
这个便是你的公网网址,只要这个界面运行着,你就可以通过不同的网络设备访问它,但是校园网不行,具体为什么我也不知道,手机热点都是可以访问的了,这个网址只是临时的,而且每次都是会变的。