嘿 ServerFault 的朋友们;
AWS 向公众发布了其最新产品之一——网关负载均衡器,它允许我们使用设备做各种有趣的事情。
背景:
我正在尝试在 EC2 上对 Squid 实例进行 POC,以进行 DNS 过滤。我已经启动并运行了 AWS 组件,并且 EC2 实例已启动 geneve 接口,该接口应该在 Eth0 上接收流量。Geneve 在 udp/6081 上运行,并封装流量。所以我需要做的是让服务器解封装流量,在指定的目标端口上将其转发回自身,以便 Squid 可以以透明代理格式(最好在 docker 容器中)拦截(例如 tcp/80 或 tcp/443)。从那里,它通过连接到 ENI 的公共 IP 传出到互联网。
问题:
据我所知,为了使这种流动行为正确发生,我需要通过 IPTables 对数据包进行彻底处理。我对 IPTables 不够熟悉,无法了解其来龙去脉,因此我在这里提问。
据我了解,流量行为应该匹配目标端口 udp/6081,发送到 Eth0 的 IP 地址(假设它是 10.10.20.5/24)。
接口适配器应该处理解封装,然后我相信它需要将流量转发到本地环回地址,该地址应该使其离开服务器,然后击中输出链(如果它是环回,它会吗?)。
然后,本地环回应该具有预路由 NAT 规则,以将 tcp/80 转发到 tcp/3129、将 tcp/443 转发到 tcp/3130 等,以便 Squid 侦听器可以相应地处理它(根据规则允许/拒绝)。
我知道当服务器本身是目标时,你的 NAT 规则如下所示:
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 3129
iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 3130
只是前面的日内瓦隧道让我不确定如何启动规则的流程。
答案1
启用路由
sudo echo 1 > /proc/sys/net/ipv4/ip_forward
启用转发到环回接口
sudo sysctl -w net.ipv4.conf.eth0.route_localnet=1
将所有 HTTP 流量 (TCP 80) 重定向至 TCP 3129
sudo iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:3129
将所有 HTTPS 流量 (TCP 443) 重定向至 TCP 3130
sudo iptables -t nat -A OUTPUT -p tcp --dport 443 -j DNAT --to-destination 127.0.0.1:3130
启用 NAT(又名 Masqurade)
sudo iptables -t nat -A POSTROUTING -j MASQUERADE