前言
最近有小伙伴问我,怎么样看自己家里有没有公网ip地址,感觉里面还是有点意思的,只是涉及的东西有点多,所以只能在这里大概讲一下什么是公网ip、私有ip。此篇的前提是IPv4。
公网/私有ip
你可能会发现在家里路由器分配给终端的ip地址往往是192.168.x.x的网段,就算你换了路由器也会是获取到192.168.x.x的ip,为什么呢?其实这个就是私有ip(内网ip)。私有ip有三种,分别是10.0.0.0~10.255.255.255,172.16.0.0~172.31.255.255,192.168.0.0~192.168.255.255 ,在公网上的路由器是没有这三个网段的路由表条目的,可以说是这三个网段在公网都不知道怎么走。
除这三个网段外的其他的ip“姑且”算为公网ip(这种说法不太正确,还有D类组播地址和E类保留地址),所以你大概知道什么是公网ip和私有ip了吗?
现在IPv4地址紧缺,很多运营商不会给你分配公网IP,但是大部分的用户是用不到公网ip,只需要满足他们能够正常上网的功能就足够了,所以就有一部分用户获取到的ip是私有网段的ip组成了一个大内网。
那么如果你家路由器获取到的ip是私有ip会怎么样呢?
简单来说就是数据流只能出不能进(对这个感兴趣的朋友可以了解一下nat技术),你只能从内网访问公网资源而不能公网访问内网资源,举个简单的例子,假如你在家里架设了一个网站web.com,你只能在你家里其他终端(手机、电脑等)访问web.com,而不能从你公司访问家里的web.com。总的来说,就是你需要在有互联网的地方就能访问到你家里的资源,那么你就要有个公网ip,现在你大致的了解了为什么需要公网ip了吧。(这段话不太准确)
查看是否公网ip
那么怎么查看自己有没有公网ip呢?以上图的网络结构为例。
运营商给个人用户的公网ip只有一个(除非你加钱),那么只有一个ip怎么给家里那么多终端设备上网呢?很简单,用路由器拨号,路由器开启dhcp功能,给lan口下的设备分配私有ip(路由器再进行一系列操作,Lan口下的终端就可以上网了),那么lan口ip就是路由器的管理地址(网关),wan口作为代表,连通全世界。所以只要查看wan口获取到运营商分配的ip地址和你访问外网的ip地址是否一致就能确认你是否拥有公网ip。
好了,讲了一大堆废话,下面看看自己是不是公网ip吧。
Openwrt只要进入管理页面就能看到wan口获取到的IP地址了,看看你的ip是不是上面提到的三类私有ip,如果在这三类地址的范围呢,那么就说明你没有公网ip(拨号的是路由器)。▼
如果你路由器WAN口获取的不是私有ip,那么你还需要确定一下访问外网的ip是否和wan口ip相同,访问这个地址,对比一下。▼
其实无论你是什么路由器,只要对比上面两点就可以知道你是否拥有公网ip了,不同的路由器wan口的信息界面不同而已,仔细找找肯定会有的。
什么是动态公网ip
运营商为了节省公网ip,往往会采取动态分配ip地址,也就是说,你的路由器获取到的ip地址会在一定的时间内变化,即使你的路由器没有断电也会重新分配。
那么就会产生一个问题了,万一我人在外面,家里的ip变了,我怎么在外面访问家里的资源呢?
动态域名解析DDNS,简单来说就是自动修改域名的解析记录:路由器检测本地公网IP与域名解析记录是否相同,如果不同,则通过域名服务商提供的API接口自动修改域名解析记录。这样即使IP一直变动,你也可以直接访问你的域名到达你需要访问的IP。
提供DDNS的域名服务商很多的,比如阿里万网、Dnspod、3322、花生壳、noip等等,这里就不继续详细的说明了。
Openwrt端口转发
配置完DDNS就可以随便的在外面访问家里的资源了吗?
答案当然是不行,你只有一个公网ip,家里那么多设备,路由器可不晓得你哪个设备要给到外网访问。并且路由器有防火墙,默认是拒绝所有入网口的流量的,所以你需要告诉你的路由器你哪台机器开放服务是什么。
▲稍微解释一下上图
- 共享名:随便起,作识别作用,标记这条是干嘛用的
- 外部端口:建议从1025~65534中选择一个数字,在公网上使用这个端口访问,比如有一个网页想要放到外网去访问,这里外部端口填1234,那么你在公网上访问这个网页就要输入【域名:端口号】即web.com:1234
- 内部IP:服务器分配到的私有ip,即路由器lan网段的ip
- 内部端口:开放的服务端口,如网页:80、443;Telnet:23;Windows远程桌面:3389
举两个常用的例子
一般的家用路由器的端口转发功能都比较简单,只要搞清楚需要填的东西是什么就可以了,我这应该挺清楚的了吧?