如何从外网访问家里的电脑

今天逛论坛的时候偶然间看到了电信用户可以轻松获得公网IP的一条内容,于是看了下自己的(本人用电信)路由器ip,惊喜的发现竟然是公网ip…之前都没有注意到….
有了公网IP,就可以做一些好玩的事了。最直接的就是可以把自己的主机当服务器来用了,省去了购买VPS的费用,在公司或者其他地方也可以连到家里的主机,传东西什么的也很方便…

判断是否是公网IP

首先要判断运营商分配给自己的IP是否是公网IP,如果没有公网IP,一切都是白搭…移动和联通的不太清楚,电信用户是可以直接获取到公网IP的。

我的路由器是TP-LINK,在电脑地址栏输入路由器地址192.168.1.1,进入路由器web界面

在路由设置->上网设置界面,可以看到WAN口的IP地址。

wan

此时,打开google,查询一下外网IP(或者直接打开http://www.ip138.com/)。

外网ip

如果路由器WAN口的IP地址和查到的外网IP地址相同,可以确定这个ip地址就是运营商分配给你的公网IP,可以拿来使用。

PS:我们在自己的机器上用ipconfig查询得到的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地址是属于本地局域网的,因特网中的所有路由器,对于目的地址是上面几类的数据报一律不进行转发。所以,因特网上的机器是无法访问我们的主机的。

当然,如果你没有使用路由器,而是直接把应当插在路由器WAN口的网线插在电脑上的话,ping出来的地址就直接就是公网IP…

动态域名解析

实际上,运营商每次分配给我们的公网IP是不一样的,都是从IP池里随机取的。可以重启路由器观察一下,每当你重启一次路由器之后,公网IP就会切换。
这样就会造成一个问题:假如我们要通过公网IP来访问我们在家里的主机,但是这个IP不是固定的,随时有可能切换,我们不可能在他切换的时候感知到(其实是可以的),即使可以,每次还要确认这个公网IP,是不是太low了?

这就需要动态域名解析来解决。简单来说就是将这些公网IP映射到一个域名上,无论IP怎么切换,我们只要通过这个域名就能得到IP,并进行访问,至于域名和动态IP怎么映射,我们不必关心,只要记住这个域名就好了。

TP-LINK本身有自己动态域名解析服务,还支持花生壳的动态域名解析服务。在路由器应用管理->DDNS 界面可以选择动态域名解析服务提供方,以及免费域名。我这里就选择了TP-LINK的域名解析服务,简单快捷。

域名解析

填写好域名信息并保存之后,打开控制台,ping一下这个域名。如果ping返回的响应结果ip地址就是我们的公网IP,那么动态域名配置成功。

端口映射

试想一下,连接到路由器上的设备往往不止一个,有电脑,平板,手机…路由器会为每个设备分配一个私有地址,而这些设备共享一个公网IP,大家轮换使用(NAT映射)。那么,我们要从外网访问家里的主机时,只有公网IP,如何在这众多的设备中选择出我们的主机呢?

端口映射解决了这个问题。先看看怎么配置端口映射。在应用管理->虚拟服务器 中添加一行映射。

端口映射

上图中,外部端口是在外网访问我们局域网主机提供的服务时指定的端口,内部端口是局域网主机提供服务的真实端口,IP地址是要访问的局域网主机的私有IP地址,可以通过ipconfig获得,协议类型是传输层协议,一般选ALL即可。

举个例子,我们想要访问局域网主机的ssh服务,ssh:yukai@debiao.tpddns.cn:8888, 8888是外部端口,路由器拿到这个端口,去查端口映射表,将请求转发到192.168.1.105的22端口,也就是内部端口,也是我们主机ssh服务的端口。这样便完成了外网与局域网主机的通信。

还有一个问题,如果路由器采用DHCP的方式为局域网内的设备分配私有IP,那么这个IP往往是有时效性的,这一次你的主机是192.168.1.105,说不定过一会就自动切换到其他IP了。这样的话对我们的端口映射会有影响。可以修改路由器设置,为局域网主机分配固定的私有IP地址。

进入应用管理->IP与MAC绑定,在IP与MAC映射表中,选择要绑定的IP与主机。主机的mac地址可以使用ipconfig查询。

静态ip

效果

web

上图是在自己的电脑上开了一个web服务,可以看到,通过域名+端口可以访问到自己主机提供的这个服务。

ssh

ssh的22端口映射一到8888,在外网通过域名+端口8888可以连接到主机的ssh。

最后

计划买个树莓派研究研究,在上面搭建博客或者爬虫什么的,通过上面的设置就可以直接访问树莓派啦~~美滋滋