创作立场声明:若有写的不好的地方,望诸位海涵。
前俩天跟大家分享了打开公网ip 的方法,也顺便告知大家打开公网ip 的好处:你可以在外面方便的访问家里的资源。比如硬盘里面的教学视频,家里的监控...还能在远程直接访问家里的桌面,远程开机...
这里再简要回顾下:你需要使用路由器的PPPoE 的拨号功能上网;然后查看PPPoE获得的ip地址,如果是100开头的地址,就打客服要求公网ip地址。具体过程说起来简单,但也非常巧妙,不妨看看这篇教程。
今天跟大家聊聊,公网ip究竟能干什么!?

基础:程序是如何通信的?
你的ip地址是1.2.3.4,我的ip地址是51.52.53.54。(5代表我)
如果我的微信给你拨打了一个电话,就意味着:51.52.53.54 ------电话请求-----> 1.2.3.4
当然,这是一个简化的过程。
现在问题来了,我的微信打了一个视频电话给你的微信,你的手机收到请求后,手机是如何知道把这一请求交给微信处理呢?也就是说,ip实现了俩个设备的通信,但是设备上具体的程序要实现通信,单靠ip 还不够。要区别通信的程序,还需要一个东西,这个东西是什么?
端口号。这里是微信打电话,而不是QQ或其他软件。区别方式就是端口号。
也就是说,每一个程序在网络通信过程中,都需要获得一个端口号。比如当你在浏览器访问值得买网站时,你其实访问的是https://www.smzdm.com:443,也就是网站的服务器程序使用443端口提供对外服务。
当然,https默认使用这个端口,所以443端口号被浏览器省略显示了。不信?你加上:443也是可以访问的。
总之,任何程序之间的通信,都需要端口号。
那是一个可怕的时代!
以前的电脑很多都是直接接入网络,那时,每个上网的电脑都有一个公网ip。多美好的时代?可别高兴太早!
因为程序是人设计的,所以难免会犯错!这就意味着我们的系统可能到处都是漏洞。而由于我们的电脑都是公网ip直接接入网络,所以那时的很多电脑的端口都暴露在外。这就给了僵尸网络,木马,病毒可趁之机...
尤其是那些常用端口,比如
- http的80端口
- 远程登录ssh的22端口
- 共享文件SMB的445端口
- ...
这些端口的暴露,很容易导致电脑中毒。当然,操作系统的设计者也意料到这一点,所以在默认状态下都会关闭端口。
不仅如此,宽带商们(也就是电信移动联通)也会贴心地帮用户封禁这些端口。不得不感叹:
有一种爱叫做封禁
后来ip地址不够了
时间来到2000年代,互联网爆炸式发展,需要上网的设备越来越多,ipv4地址不够用的故事,想必你已经听过。为了让一个公网ip支持多个设备上网,路由器来到了你家。
路由器可以使一个公网ip为多个设备所用,其奥秘是一种叫做NAT的技术。
NAT:Network Address Translation,网络地址转换。NAT分多个类型,家用路由器常用端口号转换来实现ip复用。在ip枯竭的2010年代,运营商自己就利用NAT来复用ip,你的路由器甚至连一个公网ip都没有。这种上网方式或许可以称之为NATxNAT,也就是NAT²。
NAT原理大家不用太纠结。总之就是通过不同端口号实现了对上网ip的复用
当然,对于大部分用户而言,这并不影响他们上网,而且对于有需求的用户,比如挨踢君,比如屏幕前的你,也是可以打电话申请公网ip的。记住,免费的!
NAT的喜与怒
如果说,电脑直接上网可能有端口暴露的风险,那么躲在路由器后面的电脑、手机、智能设备反而变得安全。所有攻击被路由器挡住了。NAT不仅帮运营商节省了ip,还让用户设备变得安全。
不过,有得就有失。NAT 的代价就是,因为端口没有直接对外暴露,你就无法直接在外面访问家里的资源了。比如你硬盘上的教学资源,你拍的小视频,你准备的ppt等。当然,这难不倒挨踢君。
下面的教程需要你的路由器使用PPPoE 的方式上网,并且PPPoE获得了公网ip。如果没有,看这篇教程。
端口转发
假设你家路由器的公网地址是1.2.3.4,内网地址是192.168.1.1。如果你在浏览器输入:
http://1.2.3.4:80 <------------这里的:80 可以省略。
是无法访问路由器的管理页面的。
这时,我们在路由器设置端口转发。将外网的10080端口(请勿使用80端口)转发到192.168.1.1的80端口。这样,当我访问http://1.2.3.4:10080时(这里的:10080不能省略),就能访问到内网的http://192.168.1.1:80。
再用一个例子强化一下:
假设你还有一台电脑,其局域网ip为192.168.1.2,如果你打开了远程桌面协议,那么为了让电脑能够从外面访问。将外网3389端口的访问转发到192.168.1.2的3389端口。这样,当我访问rdp://1.2.3.4:3389时,就相当于访问到内网的rdp://192.168.1.2:3389。
OpenWrt 的端口转发设置页面
好了,不管是http,ftp,ssh,wol(远程开机), rdp(远程桌面)还是smb(文件共享)。这些服务都能通过公网ip+端口转发实现外部访问。
哪怕你在厕所里、沙漠里甚至月亮上...不管在哪,只要接入了因特网,就能访问家里的服务!
这里说一下,我的工作室里面的NAS下载了十几个T 的蓝光原盘,用SMB共享,在家里访问观看也不会卡!
有图有真相
可是,如何知道我的公网ip呢?
很多朋友想说,挨踢君,你的介绍貌似很厉害的样子。那么问题来了,我要如何知道家里的公网ip是多少呢?而且据说ip地址过一俩天就会换,如何时时刻刻掌握路由器里变化着的ip 呢???
其实知道自己的ip不难,难的是时时刻刻知道。我知道,这时候会有人提内网穿透。首先,内网穿透是没有公网ip 的折中方案,性能和网速都十分受制,更别想着看蓝光电影了!既然我们有了公网ip+端口转发,就不可能忍受内网穿透。
有俩种方案可以让你时时刻刻掌握路由器里变化着的ip。1、DDNS,2、云主机。
DDNS 讲的人太多了,我讲云主机的方法。另外,我之所以不用DDNS 是因为DNS缓存策略,使得新ip生效有几分钟乃至十几分钟的延迟,这对我来说是不可接受的。
将云主机作为ip据点
我的路由器使用的是OpenWrt系统。OpenWrt是Linux发行版,所以可玩性很强。这里说一下挨踢君的ip逻辑:因为云主机都有一个固定的ip,那么就以这个主机为ip据点。
在工作室的路由器里,我写下脚本。实现如下逻辑
- 如果PPPoE重新拨号,产生了新ip,那么就将这个ip写入到我的腾讯云主机
- 通知微信,workstation的ip为xxx.xxx.xxx.xxx
- 在云主机获取家里路由器的ip
- 通过上述ip访问家里路由,将工作站新ip写入家里路由器的Hosts 文件,xxx.xxx.xxx.xxx workstation
同样在家里的路由器里,我写下脚本。实现如下逻辑
- 如果PPPoE重新拨号,产生了新ip,那么就将这个ip写入到我的腾讯云主机
- 通知微信,myhome的ip为yyy.yyy.yyy.yyy
- 在云主机获取工作站路由器的ip
- 通过上述ip访问工作站路由,将家里新ip写入工作室路由器的Hosts 文件,yyy.yyy.yyy.yyy myhome
大家应该看出来,上述俩个脚本是“对称”的。同时,云主机和我的微信时刻掌握着两端ip的变化。当然,大多数人肯定不需要这么复杂的逻辑,执行前俩个逻辑即可。
解释几个关键概念消息推送,Hosts文件:
如果PPPoE重新拨号,就执行相关脚本,这需要脚本放在/etc/ppp/ip-up.d目录下。该目录的脚本会在ip变化时执行。
为了推送微信通知,我使用了Server酱服务,免费的微信消息推送服务。基于http请求,十分简单。
Hosts 文件相当于一个ip 域名对照表。写入Hosts 文件的好处在于:在彼此路由器网络环境下,所有设备都能方便地访问到对方网络,而且可以自定义对方网络的域名。
总结
为了做到上述俩点,本文捎带回顾了公网ip 和NAT的相关历史。其实,家里的网络不仅仅是访问外网的工具,还应该具备被外网访问的能力!这才是真正的网络!这才是宽带真正的乐趣!
学习这些知识可深可浅,挨踢君会力求文章浅显易懂,让大家掌握相关概念。所谓修行靠自身,如果想更加深入玩转网络和OpenWrt可以关注我(划去)
,可以系统学习相关知识。
如有疑问,可留言告知!新人码字,求轻喷,求三连。