用pf透明地将流量从一台机器转到另一台机器上的缘起及实现方式对比
一、缘起
miscweb1(172.16.88.228)的系统近段时间经常死掉,没有查到最终原因,现在的
所以通过网络层的策略透明地实现,将流量从miscweb1上转到新机器上(用户仍然访问 miscweb1,但实际上是由新机器提供的服务),将是一个简便易行、修改最小的方式。
二、用PF实现透明转发的几种方式及对比
1、miscweb1代理转发
在miscweb1上: . 起用pf . 起用三层数据包转发功能(net.inet.ip.forwarding=1) . 增加下面的pf策略
int_if="bce0" new_dump="172.16.88.116" rdr pass on $int_if proto tcp from any to any port 9999 -> $new_dump nat pass on $int_if from any to $new_dump port 9999 -> ($int_if)
rdr数据包进入(ip_input)miscweb1时,修改目标地址到新机器上,因为起用了三层转 发,它发现目标地址是不是本机的地址(而是新机器的IP),随即通过int_if转发出去(ip_forward)。
nat在数据包即将从int_if发出去之前(ip_output),将源地址改成int_if的接口IP地址,这样新机器 看到的请求都是来源于miscweb1,这样,不需要对新机器做任何修改,回来的流量都会通过miscweb1。
在新机器上: 不需要做任何修改
特点: . 请求及返回的流量都经过miscweb1,相当于做了代理 . 新机器上显示请求都是来源于miscweb1,看不到真实的客户端地址 . 只修改了miscweb1,新机器及客户端不需要做任何修改
2、miscweb1及新机器协同实现代理转发
在miscweb1上:
. 起用pf . 起用三层数据包转发功能(net.inet.ip.forwarding=1) . 增加下面的pf策略
int_if="bce0" new_dump="172.16.88.116" rdr pass on
$int_if proto tcp from any to any port 9999 ->
$new_dump
rdr数据包进入(ip_input)miscweb1时,修改目标地址到新机器上,因为起用了三层转 发,它发现目标地址是不是本机的地址(而是新机器IP),随即通过int_if转发出去(ip_forward)。
在新机器上: . 起用pf . 增加下面的pf策略
int_if="bce0" old_dump="172.16.88.228" pass in quick on $int_if reply-to ($int_if $old_dump) proto tcp from any to any port 9999
reply-to策略在收到数据包时,记住回包时的转发地址,回给misceweb1,因为msicweb1是用 rdr进行转发,需要返回的数据也通过它,如果没有这策略,新机器会将这些回包直接发给缺省 网关。
特点: . 请求及返回的流量都经过miscweb1,相当于做了代理 . 新机器上显示请求能看到真实的客户端地址 . miscweb1和新机器都需要修改,协同操作,客户端不需要修改
3、miscweb1上单臂进行单方向的流量转发
在miscweb1上:
. 起用pf . 起用三层数据包转发功能(net.inet.ip.forwarding=1) . 增加下面的pf策略
int_if="bce0" new_dump="172.16.88.116" pass in quick on $int_if route-to ($int_if $new_dump) proto tcp from any to any port 9999 no state
route-to策略将包直接转发给新机器,注意后面的"no state",这个让pf对这个策略不生成状态,也就不 按状态表转发,每个符合这条规则的包都将进行规则匹配。原因是freebsd使用的pf落后于openbsd很多 ,不支持sloppy(松散地记录状态)记录状态方式,这要在流量单臂通过(回来的流量不通过时),导致后续 的包不能通过状态表的严格检查而中断连接。
在新机器上:
. 修改rc.conf.local,将miscweb1的ip(172.16.88.228)绑定在新蛋机的loopback接口上
特点: . 客户发过来的包都经过miscweb1,新机器回的数据包直接返回给客户端,不通过miscweb1 . 新机器上能看到客户端的真实IP . miscweb1和新机器都需要修改,协同操作,客户端不需要修改
三、其它事项
freebsd上起用pf的步骤
1、加载pf相关的内核模块
运行命令: kldload pf
修改起动配置文件(/boot/loader.conf)增加下面的配置行,让机器每次起动自动加载pf模块): pf_load="YES"
2、起用pf,freebsd下pf缺省没有起用pf(disabled)
运行命令: pfctl -e
修改起动配置文件(/etc/rc.conf.local),增加下面一行,让机器每次起动自动起用pf功能: pf_enable="YES"
用pf透明地将流量从一台机器转到另一台机器上的缘起及实现方式对比的更多相关文章
- TCP/IP(三)数据链路层~2
一.局域网 1.1.局域网和以太网的区别和联系 局域网:前面已经介绍了,其实就是学校里面.各个大的公司里,自己组件的一个小型网络,这种就属于局域网. 以太网:以太网(Ethernet)指的是由Xero ...
- Networking 基本术语/概念
目录 文章目录 目录 基本概念 冲突域(Collision Domain) 广播域(Broadcast Domain) 冲突域与广播域的区别 IP 网络数据传输方式 物理网络设备 发展简述 中继器(R ...
- PF防火墙
PF防火墙 点击认领 PF防火墙 ( 全称:Packet Filter ) 是 UNIX LIKE 系统上进行 TCP/IP 流量过滤和网络地址转换的软件系统.PF 同样也能提供 TCP/ ...
- 大约PF_RING/Intel 82599/透明VPN一些事
接近崩溃的边缘,如今,在医院这篇文章地方的想法,小病,我宁愿不吃药瓶.一台笔记本电脑,但无法上网,我不称职.想知道的东西.唯一可用3G,不开的热点.由于没人给我报销流程.这个周末,我只有一天,由于下雨 ...
- WebP 在减少图片体积和流量上的效果如何?MIP技术实践分享
作者 | Jackson 编辑 | 尾尾 不论是 PC 还是移动端,图片一直占据着页面流量的大头,在图片的大小和质量之间如何权衡,成为了长期困扰开发者们的问题.而 WebP 技术的出现,为解决该问题提 ...
- hadoop 透明加密
hadoop 透明加密 hadoop 透明加密 kms transparent 2015年04月09日 18:12:20 糖糖_ 阅读数:12248 标签: transparenthadoop kms ...
- Linux下安装流量监控工具iftop
在Linux系统中,top命令可以查看系统资源包括内存,CPU占用信息,查看和探测网络状态可以使用netstat,nmap等工具,实时流量监控可以使用iftop,下面是在CentOS7系列系统上安装i ...
- Qt——透明无边框Widget的bug
Experience 最近在封装一些类的时候,打算做一个窗口框架,能实现拖动.缩放.最大最小化.基本样式等功能,可不慎遇见一件无比蛋疼的事情,QWidget最小化后再恢复正常界面,最小化按钮居然仍处于 ...
- 定制Android透明按钮
自己在学习和做例子的过程中,常常会需要按钮,由于系统自带按钮样式不太好看,所以需要我们自己来定制项目得按钮,我常常采用2中方法: 1.是制作9-patch的图片,这样能够匹配文字内容的长短. 2.是指 ...
随机推荐
- user is not in the sudoers file.This incident will be reported
我用普通用户ssk登陆,想让ssk成为拥有超级用户的权限的普通用户 开始提示输入密码错误 ,然后就这样了 解决方法如下: 1>.进入超级用户模式.也就是输入"su -", ...
- 那些年困扰我们的委托(C#)
委托这个东西不是很好理解,可是工作中又经常用到,你随处可以看到它的身影,真让人有一种又爱又恨的感觉,我相信许多人被它所困扰过. 一提到委托,如果你学过C语言,你一定会马上联想到函数指针. 什么是委托? ...
- (剑指Offer)面试题34:丑数
题目: 把只包含因子2.3和5的数称作丑数(Ugly Number).例如6.8都是丑数,但14不是,因为它包含因子7. 习惯上我们把1当做是第一个丑数.求按从小到大的顺序的第N个丑数. 思路: 1. ...
- maven仓库介绍
maven仓库介绍 http://juvenshun.iteye.com/blog/359256
- baseDao 使用spring3+hibernate4方式
启动异常: java.lang.ClassCastException: org.springframework.orm.hibernate4.SessionHolder cannot be cast ...
- linux-用户建立及权限分配
1.建立用户 useradd –d /usr/test -m test 此命令创建了一个用户test,用户主目录为/usr/test 2.设置用户密码 .修改自己的密码 passwd ,需要输入旧 ...
- uva129 - Krypton Factor 7.4.3 困难的串
7.4.3困难的串 学习点:dfs加入返回值,递归搜索过程中如果有一个成功,就直接退出 //7.4.3 困难的串 #include<cstdio> #include<cstrin ...
- 让python整型计算结果为浮点型
这是个入门知识,我记录下. 在python中,默认情况下,如果表达式中全是整型,结果也会仅仅是整型.有时候没注意会出现意想不到的结果,比如: >>> a = 7 >>&g ...
- jQuery hover事件鼠标滑过图片半透明标题文字滑动显示隐藏
1.效果及功能说明 hover事件制作产品图片鼠标滑过图片半透明,标题文字从左到右滑动动画移动显示隐藏 2.实现原理 首先把效果都隐藏,然后定义一个伪类来触发所有的效果,接下来当触发伪类后会有一个遍历 ...
- HDU 5584 LCM Walk 数学
LCM Walk Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5584 ...