amazon-web-services - 双 NAT iptables
问题描述
我有一个使用 VNS3 EC2(非常类似于 Linux 实例)作为 NAT 网关的专用网络。我希望能够允许流量到 Internet,或将其路由到另一个实例。
我有:
- 具有 IP 172.17.0.1 的 AWS Lambda(私有子网,路由到实例 1 的互联网流量)
- NAT 实例 1,IP 为 172.17.1.1(公有子网(公有 IP)
- 具有 IP 172.17.1.2 的 NAT 实例 2(相同的公共子网(具有不同的公共 IP)
当源 IP 匹配防火墙规则(在本例中为 172.17.0.1)时,我希望实例 1 通过实例 2 将所有流量路由到 Internet。
我的防火墙规则是:
实例 1:
PREROUTING_CUST -i eth0 -s 172.17.0.0/24 -j DNAT --to-destination 172.17.1.2 POSTROUTING_CUST -d 172.17.0.0/24 -j SNAT --to-source 172.17.1.1 MACRO_CUST -o eth0 -s 0.0.0.0 /0 -j 伪装
实例 2: MACRO_CUST -o eth0 -s 0.0.0.0/0 -j MASQUERADE
如果我执行Lamda,它会超时,这表明流量被丢弃了,我猜。我怀疑我需要对来自实例 1 的请求进行 SNAT,否则实例 2 会将流量直接路由到 Lambda,而不是通过实例 1。但我有点希望可以通过 macro_cust 规则解决。
我已禁用源检查,如果我将 AWS 中的路由表更新为实例 2,则调用成功。知道有什么问题吗?
解决方案
推荐阅读
- javascript - 如何在javascript中以带2位小数的指数格式显示变量?
- javascript - 在签署 jwt 时,只保留 user_id 或整个用户对象是否更好?
- ruby-on-rails - 使用 Rails 6 Zeitwerk 时,具有相同名称的类会导致未初始化的常量
- css - 引导卡体内容溢出
- linux-kernel - 如何使用 overlayfs 动态加载设备树覆盖?
- python - 使用python在条形图中可视化数据
- azure-ad-b2c - 获取范围令牌时出错:{guid} ClientAuthError:需要用户登录。对于静默呼叫,请求必须包含 sid 或 login_hint
- node.js - 如何在koa流中将错误转发给客户端?
- flutter - BackDropFilter 不运行(颤振)
- c++ - 我想知道是否有可能在使用调试器 Visual Studio 代码进入之前检查 if 语句的评估结果