当前位置: 澳门新濠3559 > 编程 > 正文

外网IP要想访问内网IP只能先访问到路由器,per

时间:2019-12-27 17:08来源:编程
Nginx总是自动添加内网端口Nginx代理了2个WEB服务,ecs服务使用8081端口,personal服务使用8082端口Nginx服务器IP为:172.17.3.1从内网访问ecs服务是访问从内网访问personal服务是访问将172.17.3.1的

Nginx总是自动添加内网端口Nginx代理了2个WEB服务,ecs服务使用8081端口,personal服务使用8082端口Nginx服务器IP为:172.17.3.1从内网访问ecs服务是访问从内网访问personal服务是访问将172.17.3.1的8081端口映射到公网123.123.123.123的80将172.17.3.1的8082端口映射到公网123.123.123.124的80外网访问可以正常打开Nginx的静态页面,但如果访问这个地址就不能打开链接,地址栏的链接自动跳转为:8081/ecspersonal服务也是同样问题,求助如何配置Nginx能在访问这个链接时能正常打开页面00

如何判断本地(路由器)分配的IP是否公网IP?

如何将自己编写的TCP的服务器软件放到外网上去呢?这样不论是在哪里用什么网络都可以访问自己在局域网里的服务器了。

前几天接到个任务,要和另一家公司对接,具体就是我这开一个接口给对面调用.因为一开始在内网测试,那问题来了,怎么才能让对面访问到呢?

公网IP:全球唯一IP地址。(公网IP又分为静态公网IP和动态公网IP,如何分辨的话,进入路由器查看连接方式pppoe连接都是动态公网IP。)

首先大家想到的应该是在路由器上作端口映射,即NAT(Network Address Translation),网络地址转换。

​ 当然是找运维大兄弟.....操作也很简单,就是用路由做一个端口映射,用公网ip做一个端口映射到我本机地址.这样外网就能访问到我的tomcat了.

有这么一种情况:拉的联通的带宽,分配的IP只能在联通内部访问,移动网络不能访问。这个IP最多只能算是“联通内的公网IP”,不是真的公网IP。

以装有NAT软件的路由器为例,局域网里的IP要想访问外网就必须经过NAT转换为外网IP,外网IP要想访问内网IP只能先访问到路由器,然后通过路由器的转发规则访问到内网IP。

比如说公网ip是192.168.1.0,我的ip是192.168.1.1,tomcat端口是8080.

有多种方法都可以判断本地(路由)IP是否公网IP,以下一一罗列以供小伙伴们参考。

如何设置路由转发?以校园宽带路由器CrazyBox为例:

那就在路由上配一个端口9876直接映射到本地tomcat 192.168.1.1:8080.那现在外网就可以通过http://192.168.1.0:9876/访问到本地http://192.168.1.1:8080/了.

一,经验法:

1 打开浏览器键入地址:进入路由器设置界面:

就这样,做好了接口,问题又来了,因为这个接口是在核心系统里,那这样就会把所有的接口都暴露了,肯定不行..

1,一般电信adsl带宽在未升级大带宽前是(动态)公网IP。如果花费很少的钱给你升级为100M光纤上网,99.99%是内网IP,那0.01%是我还没有发现过案例。

澳门新濠3559 1

怎么做呢,怎么才能拦截这些请求呢? 当然又去问了运维大兄弟,再查了些资料,得知用Nginx可以只允许访问指定的url,其他的都直接对外禁止访问.

2,代理网络运营商99.99%都是内网IP,如长城带宽、聚友E家等。

 

那怎么做呢?

澳门新濠3559,3,光纤上网的99.99%都是内网IP。很多人是100M独享上网,经测试有时候下载速度可以有10MBps(即100Mbps)。注意,这里说的下载速度。还有一个名词叫上行速度,请知晓。

2 打开工具下的UPNP设置界面:

重新修改下映射规则,不直接映射到tomcat,先经过nginx,通过nginx再把请求发送到tomcat.

二,直观法:

以下是BC官方网站对UPnP的解释:

这里就重新映射一个端口8000,在nginx中监听这个端口,然后再配置访问规则,再代理到tomcat

1,10开头的IP都是内网IP。即10.0.0.0 到 10.255.255.255是内网IP。不少自家拉的带宽路由分配的都是10开头的IP,这类都是内网IP。

UPnP(Universal Plug and Play),通用即插即用,是一组协议的统称,不能简单理解为UPnP="自动端口映射"。在BitComet下载中,UPnP包含了2层意思:

在nginx.config中添加一段server

2,以下IP段的地址都是内网IP地址。

1、对于一台内网电脑,BitComet的UPnP功能可以使网关或路由器的NAT模块做自动端口映射,将BitComet监听的端口从网关或路由器映射到内网电脑上。

server {
        #监听8080端口,这个8080是路由映射到本机的端口
        listen       8000;
        server_name  0.0.0.0;
        #charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {
            #阻止所有请求,这里将永远输出403错误
            deny all;
        }

        #允许访问 /test/processe接口
        location ~ /test/processe {
            # 代理本地项目url
            proxy_pass http://192.168.4.48:8080;
        }
        #如果还有其他接口,就再添加一个location 
         #location ~ /test/processe1 {
            #proxy_pass http://192.168.4.48:8080;
        #}
         #location ~ /test/processe2 {
            #proxy_pass http://192.168.4.48:8080;
         #}
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }

(1)10.0.0.0 到 10.255.255.255

2、网关或路由器的网络防火墙模块开始对Internet上其他电脑开放这个端口。

这里的流程就是,外网通过访问公网ip+给定的端口,在路由根据映射规则,再访问到我这台电脑,这个时候请求不是直接去访问本机的接口,而是进入了Nginx,在这里,会去检查请求的url是否与配置允许的地址相同,不同的话就会403 Forbidden错误啦,当uri是/test/processe时,就能访问实际代理的http://192.168.4.48:8080/test/processe接口了

(2)172.16.0.0 到172.31.255.255

澳门新濠3559 2

那这样就可以让对面只能访问指定的接口.
原文链接:端口映射+nginx对外请求控制 | 火尧

(3)192.168.0.0 到192.168.255.255

我服务器软件所在计算机的IP为192.168.1.159,其所用端口为8888,因此添加到第一条。下面说明一下几个栏目的含义:

三,对比法:

备注:表明转发的作用或者意义。当然也可以随便起了,最好能让用户一眼就知道这个转发是干嘛用的。

1,登录自己的路由看自动分配的IP

外部端口:外网客户端访问到路由器的端口,可以随意设置,一般设置等于内网端口。一般路由器的wan地址都是公网地址,下面会讲。

2,登录http://www.ip138.com网站看获取的IP地址

内部端口:即服务器软件所用的端口。

3,登录http://ip.qq.com看获取的IP地址

画个图演示一下:

4,登录万网http://www.net.cn/static/customercare/yourip.asp查看获得的IP地址

澳门新濠3559 3

(如万网获取IP是二个,则是IP经运营商转换的内网环境)

一般来说这样就OK了,在客户端程序中,要连接路由器的外网地址,如下所示(基于MFC):

5,登录多个知名查IP网站查看IP地址结果对比,只要其中有一个结果IP不一致,即可说明是内网IP。注意,ip查询网站只是获得到你本地出口的IP,即使它是经过转发的IP。

if(!m_sock.Create())

四,询问法:

{

1,直接问自己的网络提供商,问他分配的IP是不是公网IP,跨网能不能访问到这个IP。如果网络运营提供商不肯定,或不能保证是公网IP,或说只提供你上网用,则意味着是内网IP。

    AfxMessageBox("Create fail!");

五,亲测法:

    return FALSE;

1,本地开启远程桌面,并确保局域网内可以正常远程。然后在外网和跨网环境看看能不能通过IP进行访问。

}

2,本地部署一个网站应用或其他应用,并确保内网可以正常访问。然后在外网和跨网环境看看能不能通过IP访问。

if(!m_sock.Connect("路由器外网地址",外部端口))

提示:

{

如是动态公网IP,可以使用nat123动态域名解析解决公网IP不固定的问题。

    DWORD nError = GetLastError();

如果公网IP的80端口被屏蔽,可以使用nat123的80映射穿透,实现搭建大众网站服务器目的。

    AfxMessageBox("Connect fail!");

如果没有公网IP,可以使用nat123端口映射,将任意内网地址映射到外网,提供外网访问,包括80映射、全端口映射、http、https、tcp、udp、ftp、广播,任意端口任意应用的访问。

    return FALSE;

下边就来说说如何用nat123免费解决下边问题,自己打开连接去看整套nat123使用方法和教程。

}

下面问题就出现了,测试时,客户端怎么连不上,nError值为10060或10061,

不同的本地网络环境可以使用不同的方案,充分发挥本地带宽优势。方案方法的合理选择使用很有作用。

查找官方资料,该错误码原因:

环境一,小习本地是ADSL网络,路由分配的是动态公网IP,且80端口是正常的。如何做网站服务,如何实现外网访问内网应用?

10060:由于连接方在一段时间后没有正确答复或联机的主机没有反应,连接尝试失败。

使用nat123动态域名解析即可。将域名实时解析到本地公网IP,即使公网IP变化,也不会影响到域名的正常使用。同时还需要在路由做下路由映射,将外网需要访问的端口,映射到内网对应应用服务器。

10061:目标机器积极拒绝连接

环境二,小李家是ADSL,路由分配的是动态公网IP,但80端口被某某封了。怎样外网访问内网应用?如何做大众网站服务?

经过检查和努力,发现不是代码问题,也不是网络的问题,而是电信宽带的问题。

访问内网应用:使用nat123动态域名解析。将域名实时固定解析到本公网IP后,即可通过域名进行访问。

以上程序我们都认为路由器的wan口地址都是公网地址,然而并不是,为了节省公网IP,电信宽带分给路由器的仍然是以个内网IP,已经被NAT过了,这样的话在路由器上的端口映射是没有用的,必须先电信那里映射。

做大众网站服务:使用nat123端口映射80映射+本地公网IP加速。本地加速后,网站数据加载是直接走本地IP的,可以发挥本地带宽优势。

怎么查看路由器wan口地址?怎么辨别该地址是不是wan口地址?

环境三,小温家是长城带宽,100M独享,但是路由分配的IP是10开头的,是经过网络运营商NAT转发的内网IP。如何做网站服务?如何实现外网访问内网应用?

首先还以CrazyBox路由器为例,进入设置页面,打开状态下的总览,地址一项即为wan口地址:

做大众网站服务时,使用80映射+网站加速。外网访问内网应用时,使用nat123端口映射,将内网应用映射到外网域名即可。

澳门新濠3559 4

环境四,小胡自己也不知道自己本地是什么网络环境,只知道可以上网。如何发布网站到外网?如何让外网其他盆友访问他电脑应用?如何与远在他乡的基友进行游戏开服联机?

辨别是否为公网地址这里提供两种办法:

做大众网站服务时,使用80映射+网站加速。外网访问内网应用时,使用nat123端口映射,将内网应用映射到外网域名即可。可以使用不限速的全端口映射,需要在所有访问端都使用访问者打开端口访问

1 打开浏览器,搜索IP,出现的即为自己的计算机的公网IP:

澳门新濠3559 5

如果该IP与路由器设置页面的IP不一致,则说明路由器wan口地址不是公网IP。

2 打开浏览器搜索万网查询,点击万网获取本地公网地址,则会跳出一个页面:

澳门新濠3559 6

澳门新濠3559 7

     如果出现两个IP,则说明路由器wan口地址不是公网IP。

那么这种情况下该怎么办的?申请公网IP是很贵的,下面推荐花生壳

的内网参透服务,利用花生壳提供的域名访问内网服务器。

花生壳内网参透服务的原理,图来源于网络:

澳门新濠3559 8

官方解释:

    传统的动态域名服务(DDNS)必须在公网IP地址环境下实现访问,但随着全球互联网的飞速发展,各个宽带运营商均出现IPv4地址资源枯竭的问题,于是一些宽带运营商开始分配给用户内网IP地址,使得一部分正在使用公网DDNS软件的用户无法正常访问。在此情况下,NAT-DDNS技术应运而生。

NAT-DDNS服务器上同时存在DDNS服务和NAT转换服务,内网服务器通过DDNS服务程序向NAT-DDNS服务器注册本机的域名及内网IP地址信息。来自外网的请求对此域名进行访问时,域名解析服务会将NAT-DDNS服务器的公网IP地址返回给请求方,请求方通过访问NAT转换服务程序,启动内外网NAT转换,从而完成动态映射,实现内网穿透访问。

 

下面开始吧!

1 首先登入花生壳,注册账号:

澳门新濠3559 9

2 选择内网参透服务,是要花6元钱的,可以做两个映射,下面就来配置:
澳门新濠3559 10

域名和外部端口就选他默认的即可,完成后,他会给你分配一个随机端口,该端口在服务到期前是不可以更改的。

澳门新濠3559 11

默认分配了35672端口,下面解析一下该域名的ip,该域名的IP每次开启服务都不同。点击域名列表选项,点击域名解析即可查看:

澳门新濠3559 12

可以将该IP替换掉代码中的IP了,替换之后,再次测试,连接成功!

然而问题又来了,之前在局域网的时候,服务器能获取每一个客户端的IP和端口。一旦客户端到了外网,获取的ip都是服务器的ip,都是192.168.1.159,而端口却是变化的。服务器代码:

void CSocketL::OnAccept(int nErrorCode)

{

    // TODO: Add your specialized code here and/or call the base class

    CSocketC *p = new CSocketC;

    if(!Accept(*p))

    {

        delete p;

        return;

    }

    CString szIP;

    UINT    nPort;

    p->GetPeerName(szIP,nPort);

    CServerDlg *pDlg = (CServerDlg *)AfxGetMainWnd();

    pDlg->OnAccept(szIP,nPort);

    AfxMessageBox(szIP);

    CSocket::OnAccept(nErrorCode);

}

该如何解决?用抓包软件Wireshark抓一下试试:

现让客户端在内网连接服务器,不用花生壳:

澳门新濠3559 13

可以从三次握手中清楚的看到,源端口1349,与服务器获取端口一直。目标端口8888,与程序设定一致。这种方式的连接是不经过路由器的,双方的IP和端口都很明朗。

下面看看在外网访问的抓包:

澳门新濠3559 14

发现其过程大致如下:
澳门新濠3559 15

在花生壳内部端口号变了,甚至最后访问的不是服务器的8888端口,而是另外一个随机端口x,实际测试中服务器获取的客户端端口号是x+1。这其中映射加穿透,我还没搞明白,总之,端口变了。

那么真实开发软件遇到这种情况就不能获取客户端端口吗?其实一般都将IP地址跟端口放在消息内容中传送,对方收到后再解析,由应用层协议完成,这样不管他中间过程多曲折,IP和端口都不会变。

至于花生壳中间的过程有待学习,待更。

编辑:编程 本文来源:外网IP要想访问内网IP只能先访问到路由器,per

关键词:

  • 上一篇:没有了
  • 下一篇:没有了