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内联的更多相关文章

  1. Linux 中 x86 的内联汇编

    工程中需要用到内联汇编,找到一篇不错的文章,趁机学习下. 原文地址:http://www.ibm.com/developerworks/cn/linux/sdk/assemble/inline/ 如果 ...

  2. Linux C中内联汇编的语法格式及使用方法(Inline Assembly in Linux C)【转】

    转自:http://www.linuxidc.com/Linux/2013-06/85221p3.htm 阅读Linux内核源码或对代码做性能优化时,经常会有在C语言中嵌入一段汇编代码的需求,这种嵌入 ...

  3. Neutron 理解(14):Neutron ML2 + Linux bridge + VxLAN 组网

    学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...

  4. 最牛X的GCC 内联汇编

    导读 正如大家知道的,在C语言中插入汇编语言,其是Linux中使用的基本汇编程序语法.本文将讲解 GCC 提供的内联汇编特性的用途和用法.对于阅读这篇文章,这里只有两个前提要求,很明显,就是 x86 ...

  5. GCC内联汇编入门

    原文为GCC-Inline-Assembly-HOWTO,在google上可以找到原文,欢迎指出翻译错误. 中文版说明 由于译者水平有限,故译文出错之处,还请见谅.C语言的关键字不译,一些单词或词组( ...

  6. [翻译] GCC 内联汇编 HOWTO

    目录 GCC 内联汇编 HOWTO 原文链接与说明 1. 简介 1.1 版权许可 1.2 反馈校正 1.3 致谢 2. 概览 3. GCC 汇编语法 4. 基本内联 5. 扩展汇编 5.1 汇编程序模 ...

  7. 嵌入式C语言自我修养 10:内联函数探究

    10.1 属性声明:noinline & always_inline 这一节,接着讲 __atttribute__ 属性声明,__atttribute__ 可以说是 GNU C 最大的特色.我 ...

  8. ARM嵌入式开发中的GCC内联汇编__asm__

    在针对ARM体系结构的编程中,一般很难直接使用C语言产生操作协处理器的相关代码,因此使用汇编语言来实现就成为了唯一的选择.但如果完全通过汇编代码实现,又会过于复杂.难以调试.因此,C语言内嵌汇编的方式 ...

  9. 通过调用C语言的库函数与在C代码中使用内联汇编两种方式来使用同一个系统调用来分析系统调用的工作机制

    通过调用C语言的库函数与在C代码中使用内联汇编两种方式来使用同一个系统调用来分析系统调用的工作机制 前言说明 本篇为网易云课堂Linux内核分析课程的第四周作业,我将通过调用C语言的库函数与在C代码中 ...

随机推荐

  1. JVM内存区域划分Eden Space、Survivor Space、Tenured Gen,Perm Gen解释 (生动形象)

    [转自]:https://blog.csdn.net/sd4015700/article/details/50109939 jvm区域总体分两类,heap区和非heap区.heap区又分:Eden S ...

  2. Azkaban时区问题导致调度差1天

    设置了Azkaban调度是每日凌晨一次,如下: 但是调度历史上显示最近一次调度时间是 初步怀疑是因为时区问题导致,查看服务器时区如下 cat /etc/timezone 为Asia/Shanghai. ...

  3. Mac生成APP图标和启动图的脚本

    概述 之前用的一个批量导出APP图标和启动图的软件,今天发现收费了,于是自己造了个简单的轮子. 实现 Mac上的sips命令,可以很方便的帮助用户修改图片尺寸 Xcode里面的APP启动图资源包含两部 ...

  4. python 定时器schedule执行任务

    import schedule import time """英文版书籍:<essential sqlalchemy>,这本书讲了很多在每天某个指定的时间点上 ...

  5. oracle 子查询 where having from ,from子查询提高效率

    where 子查询主要功能是控制数据行的,返回结果一般都是单行单列.多行单列.单行多列数据 单行单列 SELECT * FROM emp WHERE hiredate=( SELECT MIN(hir ...

  6. ios学习路线—Objective-C(装箱和拆箱)

    概述 从前面的博文我们也可以看到,数组和字典中只能存储对象类型,其他基本类型和结构体是没有办法放到数组和字典中的,当然你也是无法给它们发送消息的也就是说有些NSObject的方法是无法调用的,这个时候 ...

  7. Tomcat出现需要输入账号和密码问题

    这里是端口冲突问题: 可以做一下几个解决方案: 第一:更好Tomcat/conf/server.xml文件里面的制定8080端口号,更改为你能记住的端口数: 第二:找到冲突的端口的进程,杀死这个进程, ...

  8. JavaScript中的数据属性和访问器属性

    在学习JavaScript原型(prototype)和原型链(prototype chain)知识的时候,发现数据属性和访问器属性的重要性,通过不断的查找相关知识,浅显理解如下,若有差错,希望不吝赐教 ...

  9. linux 学习第十八天学习(DNS分离解析、DHCP配置、邮件服务配置)

    DNS分离解析技术 yum install bind-chroot systemctl restart named systemctl enable named vim /etc/named.conf ...

  10. 安装好XAMPP+安装好PhpStorm 然后搭建PHP开发环境

    1.安装XAMPP 1.1.可以参考我的这篇博客:XMAPP的安装与配置. 2.安装并破解PhpStorm 2.1.可以参考我的这篇博客:PhpStorm2016.2版本安装与破解. 3.配置PhpS ...