ats Linux Bridge内联
Linux可以配置为在桥接模式下运行。 为网桥分配了两个或更多物理接口。 在接口
之间共享单个IP地址。 默认情况下,任何到达一个接口的数据包都会立即路由到另一个
网桥接口。
需要的Linux包:
bridge-utils
ebtables
在我们设置桥接模式的示例中,我们将使用本地地址192.168.1.11/24并将eth0
和eth1作为桥接接口;
brctl addbr br0 # create bridge device
brctl stp br0 off # Disable spanning tree protocol
brctl addif br0 eth0 # Add eth0 to bridge
brctl addif br0 eth1 # Add eth1 to bridge
ifconfig eth0 0 0.0.0.0 # Get rid of interface IP addresses
ifconfig eth1 0 0.0.0.0 # ditto # Set the bridge IP address and enable it
ifconfig br0 192.168.1.11 netmask 255.255.255.0 up
如果您还没有这样做,请记住添加一个默认路由,例如此路由为192.168.1.1。
ip route add default via 192.168.1.1

绿色箭头是源自客户端的数据包,红色箭头是源自源服务器的数据包。 未定向到本地地址的所有流量都将通过网桥。 我们需要分解一些流量并对其进行路由,以便将其路由到ATS。 这需要ebtables。 我们想要拦截的流是绿色1(从客户端到网桥)和红色1(源服务器到桥接)。
在此示例中,我们将拦截端口80(HTTP)流量。 我们将使用BROUTING链,因为它仅针对从外部发起并到达(转发启用)接口的数据包。 虽然看起来这将拦截所有端口80流量,但它只会影响上述两种流量。 -j redirect将数据包标记为转移到网桥而不转发,DROP目标将数据包放入正常的iptables路由中,以便我们可以对它们使用标准设备测试[1]。 虽然此示例仅处理端口80,但除端口值外,其他端口相同。 另请注意,此处的端口是从客户端和源服务器的角度来看的端口,而不是Traffic Server服务器端口。
ebtables -t broute -F # Flush the table
# inbound traffic
ebtables -t broute -A BROUTING -p IPv4 --ip-proto tcp --ip-dport 80 \
-j redirect --redirect-target DROP
# returning outbound traffic
ebtables -t broute -A BROUTING -p IPv4 --ip-proto tcp --ip-sport 80 \
-j redirect --redirect-target DROP
Traffic Server在第3层运行,因此我们需要使用iptables来正确处理IP数据包:
iptables -t mangle -A PREROUTING -i eth1 -p tcp -m tcp --dport 80 \
-j TPROXY --on-ip 0.0.0.0 --on-port 8080 --tproxy-mark 1/1
iptables -t mangle -A PREROUTING -i eth0 -p tcp -m tcp --sport 80 \
-j MARK --set-mark 1/1
此时接口的方向性很重要。 例如,eth1是入站(客户端)接口,而eth0是出站(源服务器端)接口。 我们标记两个数据包流,以便我们可以对它们使用策略路由。 对于入站数据包,我们需要使用TPROXY强制接受数据包到外部IP地址。 对于返回出站数据包,将有一个套接字打开绑定到外部地址,我们只需要强制它在本地传递。 --on-ip的值为0,因为目标端口正在侦听并且未绑定到特定地址。 --on-port的值必须与Traffic Server服务器端口匹配。 否则它的值是任意的。 --dport和--sport从客户端和源服务器的角度指定端口。
一旦标记了流,我们就可以通过策略路由表强制它们通过环回接口在本地传递:
ip rule add fwmark 1/1 table 1
ip route add local 0.0.0.0/0 dev lo table 1
使用的标记是任意的,但它必须在iptables和路由规则之间保持一致。
在records.config中设置
proxy.config.http.server_ports value from --on-port (see below)
proxy.config.reverse_proxy.enabled 1
proxy.config.url_remap.remap_required 0
其他疑难解答
检查以确保iptables没有过滤(阻止)传入的HTTP连接。
您可以使用以下命令清除所有过滤器:
iptables -t filter --flush FORWARD
iptables -t filter --flush INPUT
这有点激烈,应该只用于测试/调试。 实时系统可能需要一些过滤器,但这超出了本文档的范围。 如果这样可以解决问题,那么您的过滤器集限制性太强。
请注意,此问题将阻止基本网桥(没有ATS)允许HTTP流量通过。
验证是否已启用IP数据包转发。
cat /proc/sys/net/ipv4/ip_forward
echo '1' > /proc/sys/net/ipv4/ip_forward
可以通过将其置于/etc/sysctl.conf中来保持此设置
net/ipv4/ip_forward=1
ats Linux Bridge内联的更多相关文章
- Linux 中 x86 的内联汇编
工程中需要用到内联汇编,找到一篇不错的文章,趁机学习下. 原文地址:http://www.ibm.com/developerworks/cn/linux/sdk/assemble/inline/ 如果 ...
- Linux C中内联汇编的语法格式及使用方法(Inline Assembly in Linux C)【转】
转自:http://www.linuxidc.com/Linux/2013-06/85221p3.htm 阅读Linux内核源码或对代码做性能优化时,经常会有在C语言中嵌入一段汇编代码的需求,这种嵌入 ...
- Neutron 理解(14):Neutron ML2 + Linux bridge + VxLAN 组网
学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...
- 最牛X的GCC 内联汇编
导读 正如大家知道的,在C语言中插入汇编语言,其是Linux中使用的基本汇编程序语法.本文将讲解 GCC 提供的内联汇编特性的用途和用法.对于阅读这篇文章,这里只有两个前提要求,很明显,就是 x86 ...
- GCC内联汇编入门
原文为GCC-Inline-Assembly-HOWTO,在google上可以找到原文,欢迎指出翻译错误. 中文版说明 由于译者水平有限,故译文出错之处,还请见谅.C语言的关键字不译,一些单词或词组( ...
- [翻译] GCC 内联汇编 HOWTO
目录 GCC 内联汇编 HOWTO 原文链接与说明 1. 简介 1.1 版权许可 1.2 反馈校正 1.3 致谢 2. 概览 3. GCC 汇编语法 4. 基本内联 5. 扩展汇编 5.1 汇编程序模 ...
- 嵌入式C语言自我修养 10:内联函数探究
10.1 属性声明:noinline & always_inline 这一节,接着讲 __atttribute__ 属性声明,__atttribute__ 可以说是 GNU C 最大的特色.我 ...
- ARM嵌入式开发中的GCC内联汇编__asm__
在针对ARM体系结构的编程中,一般很难直接使用C语言产生操作协处理器的相关代码,因此使用汇编语言来实现就成为了唯一的选择.但如果完全通过汇编代码实现,又会过于复杂.难以调试.因此,C语言内嵌汇编的方式 ...
- 通过调用C语言的库函数与在C代码中使用内联汇编两种方式来使用同一个系统调用来分析系统调用的工作机制
通过调用C语言的库函数与在C代码中使用内联汇编两种方式来使用同一个系统调用来分析系统调用的工作机制 前言说明 本篇为网易云课堂Linux内核分析课程的第四周作业,我将通过调用C语言的库函数与在C代码中 ...
随机推荐
- virtualbox+vagrant学习-2(command cli)-10-vagrant Port命令
Port 格式: vagrant port [options] [name|id] 端口命令显示映射到主机端口的客户端口的完整列表 userdeMacBook-Pro:~ user$ vagrant ...
- 内存,缓存,cpu,硬盘关系
RAM(random access memory)即随机存储内存,这种存储器在断电时将丢失其存储内容,故主要用于存储短时间使用的程序.我把它叫耗电存储器 ROM(Read-Only Memory)即只 ...
- cloudstack 添加新网卡使其能上网
由于虚拟机使用了默认的网络套餐,是不能上网的.现在的需求是使其能上网. 操作步骤: 1.添加一个在能上网的网络里的网卡,使其成为默认网卡 2.复制网卡配置文件,修改网卡名称等,重启network(可能 ...
- 控制层方法中获取url目录
控制层方法中获取url目录 Request.Url.GetLeftPart(UriPartial.Authority).ToString(); //返回 http://localhost:9246(网 ...
- Windows 的 Oracle Data Access Components (ODAC)
下载 x64bit https://www.oracle.com/technetwork/cn/database/windows/downloads/index.html 适用于 Windows 的 ...
- 电商 APP 下单页(俗称车2) 业务流程概要设计
购物车是电商APP的一个关键功能点,一般购物车包含 3-4 个页面,分别是: 1.购物车的商品列表页 2.商品下单页 3.订单付款页面 4.订单付款成功页面 由于现有购物车逻辑相对混乱,这里重新整理一 ...
- Linux基础命令之文件和目录操作(二)
. find 用于查找目录下的文件,也可以调用其他命令使用 find [-H] [-L] [-P] [-D debugopts] [-Olevel] [path...] [expression] fi ...
- bootstrap-treeview使用
1.数据 var tree = [{ text: "车型A", nodes: [{ text: "车系1", }, { text: "车系2" ...
- 筑基期—C语言
1.1 环境: 在ANSIC的任何一种是实现中,存在两种不同的环境.第一种是翻译环境,第二种是执行环境.标准明确说明这两种环境不必在同一台机器上,交叉编译器就是在一台机器上运行,但它所产生的可执行代码 ...
- C 没得写的水文
引言 - 没得写 最近工作上需要处理事情很多(接手, 维稳, 危机), 还有深入读书计划也提上了日程. 为了每月水经验, 这里带大家写个 C 的多值返回吧 : ) #include <stdio ...