首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >面向Docker的Linux源代码路由

面向Docker的Linux源代码路由
EN

Unix & Linux用户
提问于 2020-12-02 18:58:43
回答 1查看 657关注 0票数 2

我有一个类似的问题链接到ServerFault,但是在进一步研究这个问题之后,我相信我已经将这个问题改进为一个Linux路由表问题。

背景:

AWS发布了他们的网关负载均衡器,它用GENEVE封装数据包并将它们转发给指定的目标组。我的目标是让运行Squid的EC2实例充当域筛选的透明代理。我已经启动并运行了AWS路由和GLB,并且正在将数据包传递到EC2实例,但无法使数据包转发行为正确工作。

努力:

因为EC2实例,即反封装后,应该查看它的路由表(一旦启用了ipv4转发),并将流量转发给eth0,因为这是默认路由。

但是,因为我需要拦截这些通信量,所以我想为10.0.0.0/8中的通信量设置一个下一跳,转到172.17.0.2 (码头容器的IP )。码头容器公开了tcp/80、tcp/443和tcp/3128,并映射了3128->3128、80->3129和443->3130。假设它通过,流量从容器中排出,并命中网络的默认网关(172.17.0.1/16),然后按照它的本地路由表到达EC2实例的网关(10.160.221.97)。

它是一个bit...complicated,但其思想是让ec2实例在接收和过滤通信量时能够自给自足。我不需要有状态的跟踪,我们只是想阻止出境交通的坏地方(在许可证URL列表中没有色情!)

到目前为止我所做的是:

使用GLBe的远程单播地址创建GENEVE接口:

代码语言:javascript
运行
复制
#enable geneve tunnel
sudo ip link add name geneve0 type geneve id 1000 remote 10.160.221.119
sudo ip link set geneve0 up

启用IP转发:

代码语言:javascript
运行
复制
#set forwarding
sudo sysctl -w net.ipv4.ip_forward=1

创建自定义路由表:

代码语言:javascript
运行
复制
#create custom route table with ID 200
sudo echo "200 custom" >> /etc/iproute2/rt_tables

所以应该是这样的:

代码语言:javascript
运行
复制
cat /etc/iproute2/rt_tables
#
# reserved values
#
255 local
254 main
253 default
0   unspec
#
# local
#
#1  inr.ruhep
200 custom

在自定义路由表中添加了规则,以说明如果流量来自10/8,则使用自定义路由表:

代码语言:javascript
运行
复制
sudo ip rule add from 10.0.0.0/8 lookup custom

为了确保我的笔记本电脑(在172.16网络上)不会失去访问权限:

代码语言:javascript
运行
复制
sudo ip route add 172.16.0.0/12 dev eth0 via 10.160.221.97

(而且,你知道,因为我在写这篇文章,你可以很清楚地看出它不起作用)

因此,默认情况下的路由表如下所示:

代码语言:javascript
运行
复制
ip route list

default via 10.160.221.97 dev eth0 
10.160.221.96/27 dev eth0 proto kernel scope link src 10.160.221.105 
169.254.169.254 dev eth0 
172.16.0.0/12 via 10.160.221.97 dev eth0
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 

流量进入接口,GENEVE封装,所有的伟大。我陷入困境的地方是ec2实例上的路由。

添加自定义表的默认路由时,将失去访问权限:

代码语言:javascript
运行
复制
sudo ip route add default via 172.17.0.2 dev docker0 table custom

对我缺少的东西有什么帮助或洞察力吗?

编辑-进一步更新:

如果我更改命令,没有区别:

代码语言:javascript
运行
复制
[ec2-user@proxy-10-160-221-105 ~]$ sudo ip route add default via 172.17.0.2 dev eth0 table custom
Error: Nexthop has invalid gateway.
[ec2-user@proxy-10-160-221-105 ~]$ sudo ip route add default via 172.17.0.2 table custom
EN

回答 1

Unix & Linux用户

发布于 2020-12-07 14:17:14

我不认为这是一个路由问题。您不需要任何额外的路由声明。只要和iptable一起玩,你就会状态良好。

在充当停靠主机的EC2实例上启用路由

代码语言:javascript
运行
复制
sudo echo 1 > /proc/sys/net/ipv4/ip_forward

将所有HTTP流量(TCP 80)重定向到侦听TCP 3129的停靠容器

代码语言:javascript
运行
复制
sudo iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination 172.17.0.2:3129

将所有HTTPS流量(TCP 443)重定向到侦听TCP 3130的停靠容器

代码语言:javascript
运行
复制
sudo iptables -t nat -A OUTPUT -p tcp --dport 443 -j DNAT --to-destination 172.17.0.2:3130

Enable NAT (又名Masqurade)

代码语言:javascript
运行
复制
sudo iptables -t nat -A POSTROUTING -j MASQUERADE
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/622607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档