使用AWS api网关+ lambda + Nodejs的私有和公共ip

时间:2018-12-10 07:16:55

标签: node.js amazon-web-services aws-lambda aws-api-gateway

我正在尝试在AWS环境中为用户提供私有IP和公共IP。根据此答案(https://stackoverflow.com/a/46021715/4283738),应该有一个标题X-Forwarded-For,分隔的ips以及论坛(https://forums.aws.amazon.com/thread.jspa?threadID=200198

但是当我通过API Gateway + lambda + nodejs v8部署了我的api时。我已经为事件和上下文变量对JSON进行了调试,以便对nodejs处理函数的参数进行调试(https://y0gh8upq9d.execute-api.ap-south-1.amazonaws.com/prod),但我没有获得私有ip。

lambda函数为

const AWS = require('aws-sdk');
exports.handler = function(event, context, callback){
    callback(null, {
        "statusCode": 200,
        "body": JSON.stringify({event,context})
    });
}

API网关详细信息

GET-集成请求

集成类型-Lambda函数

使用Lambda代理集成-True

功能API:https://y0gh8upq9d.execute-api.ap-south-1.amazonaws.com/prod

3 个答案:

答案 0 :(得分:2)

情况1:出于安全原因,您无法获得用户的私有IP(如果由用户配置,则是通过NAT或PAT(屏幕后面的网络地址转换或端口地址转换)完成的。NAT将添加并在表中发送该IP,并在请求之前发送公共ID或可以说是router-id)。

情况2:如果您的私人IP在这里是多个用户正在使用同一公共网络(WIFI等)。然后,您可以再次定义两个IP,一个是公共IP,对于所有公共IP,但在公共网络内部,它们有另一个IP,该IP在该公共网络内是唯一的。

例如:假设有带有公共IP(1.1.1.1)的WIFI。它有两个用户A和B.值得注意的是,由于他们共享同一个WIFI,因此路由器将只有一个IP(所有公共和公用),但是在该路由器内部,A和B将具有不同的IP,例如192.1.1.1和192.1.1.2,可以称为私有。

在两种情况下,您都只会获得公共IP(位于X-Forwarded-For标头中的位置0)。

  

您可以在内部获取X-Forwarded-For标头   event.headers.multiValueHeaders。

如果您可以同时访问两者,那么拥有私有和公共ip有什么好处?

要访问AWS VPC专用子网,您也必须使用NAT,并且出于安全原因,客户端将永远不知道实际IP。我要求您再次重新审查您的要求。

答案 1 :(得分:0)

不知道是什么使您陷入困境,如果我错了,请纠正我。 来自Wiki

  

X-Forwarded-For(XFF)HTTP标头字段是一种常见的方法,用于标识通过HTTP代理或负载平衡器连接到Web服务器的客户端的原始IP地址。

我在标头中设置了X-Forwarded-For,并使用Postman进行了测试: https://imgur.com/a/8QZEdyH

答案 2 :(得分:0)

“ X-Forwarded-For”标头显示了用户的公共IP。

就这些了。<​​/ p>

内部IP不可见。

仅标头中指示的“公共ip”。