iptables防火墙详解(三)
linux 高级路由 策略路由(mangle表)
lartc(linux advanced routing and traffic control)
http://www.lartc.org
# rpm -qa |grep iproute --iproute工具包软件
iproute-3.10.0-74.el7.x86_64
ip命令就属于iproute软件包
ip addr
ip neigh
ip rule
ip route
ip tunnel
==============================================
# ip rule list
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
# cat /etc/iproute2/rt_tables
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep # ip route list/show table local/255
# ip route list/show table main/254
# ip route list/show table default/253
=============================================================
50 内网用户 ---------》路由器1--》 猫1 (快网络) 50 内网用户 ----------》路由器2 --》猫2 (慢网络)
应用实例1:
---------》路由器1--》 猫1 (快网络)
|
|
100 内网用户 ----linux路由
|
|
---------》路由器2 --》 猫2 (慢网络)
linux路由器有两条上网线路,一个快,一个慢
有这样的需求:内网用户需要给钱共享上网,有人给钱多,需要快线路,有人给钱少,需要快线路,这样的话,我们就可以使用策略路由了 模拟的话使用下面的图:
172.16.25.2
----------》VM2(连到br0) 线路一
|
192.168.100.128 | 172.16.25.1 br0
VM1(连到virbr1)----linux路由192.168.100.1 virbr1 公网
| 192.168.101.1 virbr2
|
---------》VM3 (连到vribr2) 线路二
192.168.101.128
上图架构中:
1.把VM1网关指向192.168.100.1
2,把linux路由器的网关指向172.16.25.2
3.linux路由打开ip_forward
4,这四台的iptables都关闭 先测试:在VM1上ping一个外网IP(如 ping 8.8.8.8),这个时候在VM2和VM3上抓包,但只能在VM2上抓到相关的包,表示数据包从VM2出去
# tcpdump -i eth0 icmp and src 192.168.100.128 然后通过下面的策略让VM1ping的包从VM3出去 下面就是在linux路由上进行操作来实现:
操作命令:
echo 200 t1 >> /etc/iproute2/rt_tables
ip rule add from 192.168.100.128 table t1
ip route add default via 192.168.101.128 dev virbr2 table t1
ip route flush cache --如果加错了规则,想删掉,就使用ip rule del table t1删除规则,再ip route del default via 192.168.101.128 dev virbr2 table t1删除t1路由表的网关 操作完后,测试
1,在内网ping 8.8.8.8
2,在两个模拟外网路由器的机器上抓包
# tcpdump -i eth0 icmp and src 192.168.100.128
3,结果这次只能在VM3上抓到包,OK 应用实例2:
172.16.25.2
----------》VM2(连到br0) 线路一
|
192.168.100.128 | 172.16.25.1 br0
VM1(连到virbr1)----linux路由192.168.100.1 virbr1 公网
| 192.168.101.1 virbr2
|
---------》VM3 (连到vribr2) 线路二
192.168.101.128 要实现不同类型的包走不同的线路:如80的访问走一条线,其它的走另外一条线路
实现不同类型的包的策略路由,就要借助于iptables的mangle表的set mark功能 1,在linux路由器上使用策略路由实现 # iptables -t mangle -A PREROUTING -i virbr1 -p tcp --dport 80 -j MARK --set-mark 1 --把从内网进来要出去的80的包打标记为1 # echo 100 http.out >> /etc/iproute2/rt_tables --建一张叫http.out的表,表编号100 # ip rule add fwmark 1 table http.out pref 20000 --指定打了标记为1的所有包都走http.out这张路由表,并指定优先级为20000
# ip route add default via 192.168.101.128 dev virbr2 table http.out --指定http.out表从virbr2出去找192.168.101.128
# ip route flush cache --刷新路由缓存 2,测试
测试一:在内网192.168.100.128客户端上
elinks 8.8.8.8
在模拟两个线路的机器上都执行下面的命令
tcpdump -i eth0 tcp port 80
--只有线路二上能抓到包,OK
测试二:在内网192.168.100.128客户端上
ping 8.8.8.8
在模拟两个线路的机器上都执行下面的命令
tcpdump -i eth0 icmp
--只有线路一上能抓到包,OK
--从上面就可以看到出去的80端口的包和其它的包走的路线不一致 iptables的mangle表打标记的应用举例:
1,刚讲的例二
2,iptables的mangle打标记+tc 做流量控制(这个课程不讨论,有兴趣上网去搜)
3,iptables的mangle打标记+LVS 做负载均衡 ============================================================================
问题:
要求:写出这个电信用户访问到双线web服务器时的IP变化过程(只写源IP,目标IP,和做SNAT还是DNAT等)
你觉得有没有问题?
192.168.100.100 192.168.2.100
电信用户 网通用户
| |
192.168.100.1 | | 192.168.2.1
电信用户家里路由器 网通用户家里路由器
51.1.2.3 | | 61.1.2.3
|www.abc.com |
| |
71.1.2.3 | | 81.1.2.3
机房电信路由器 机房网通路由器
10.1.1.1 | | 172.16.2.1
| |
| |
10.1.1.100 eth0 双线web服务器 eth1 172.16.2.100 实验环境:
精简一点可以使用下面的四台虚拟来做,并且要注意宿主机(真实机)不能在这里扮演角色,因为宿主机和任何虚拟机都是可以直接通的
下图中,电信客户端和网通客户端就没有使用去模拟路由器NAT,直接用一台虚拟机用两个网卡来模拟两个角色 172.16.25.2 br0 客户端 virbr1 192.168.100.129
| |
| |
| |
172.16.25.3 br0 virbr1 192.168.100.128
机房电信路由器1 机房网通路由器2
192.168.101.128 virbr2 virbr3 192.168.102.128
| |
| |
192.168.101.129 virbr2 双线服务器 virbr3 192.168.102.129
准备好上图架构的ip后
第一步:
在双线web服务器安装并启动httpd,做一个主页方便测试
# yum install httpd httpd-devel
# echo "main page" > /var/www/html/index.html
# systemctl start httpd 第二步:
电信路由器上做dnat(还要打开ip_forward)
# systemctl restart firewalld.service
# firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.101.129
网通路由器上做dnat(还要打开ip_forward)
# systemctl restart firewalld.service
# firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.102.129 第三步:
在双线web服务器上使用策略路由实现
# ip rule
0: from all lookup local
32766: from all lookup main
32767: from all lookup default # echo 100 dianxin >> /etc/iproute2/rt_tables
# echo 200 wangtong >> /etc/iproute2/rt_tables # ip rule add from 192.168.101.129 table dianxin
# ip rule add from 192.168.102.129 table wangtong # ip route add default via 192.168.101.128 table dianxin
# ip route add default via 192.168.102.128 table wangtong 第四步:
客户端elinks测试,两个线路都ok
iptables防火墙详解(三)的更多相关文章
- iptables防火墙详解
		
iptables常用命令 iptables -nv -L 查看iptables列表 iptables -F 清空iptables规则 iptables-save > /etc/sysconfig ...
 - Linux iptables 防火墙详解
		
0x00 iptables介绍 linux的包过滤功能,即linux防火墙,它由netfilter 和 iptables 两个组件组成. netfilter 组件也称为内核空间,是内核的一部分,由一些 ...
 - iptables 防火墙详解
		
一:前言 防火墙,其实说白了讲,就是用于实现Linux下访问控制的功能的,它分为硬件的或者软件的防火墙两种.无论是在哪个网络中,防火墙工作的地方一定是在网络的边缘.而我们的任务就是需要去定义到底防 ...
 - iptables防火墙详解(二)
		
-- 基于状态的iptables 如果按照tcp/ip来划分连接状态,有11种之多(课后可以自己去读一下相关知识) 但iptables里只有4种状态:ESTABLISHED.NEW.RELATED及I ...
 - iptables防火墙详解(一)
		
-- 防火墙 常见的防火墙 :瑞星 江民 诺顿 卡巴斯基 天网...... iptables firewalld http://www.netfilter.org/ netfilter / iptab ...
 - Linux防火墙iptables学习笔记(三)iptables命令详解和举例[转载]
		
Linux防火墙iptables学习笔记(三)iptables命令详解和举例 2008-10-16 23:45:46 转载 网上看到这个配置讲解得还比较易懂,就转过来了,大家一起看下,希望对您工作能 ...
 - linux下IPTABLES配置详解 (防火墙命令)
		
linux下IPTABLES配置详解 -A RH-Firewall-1-INPUT -p tcp -m state --state NEW -m tcp --dport 24000 -j ACCEPT ...
 - iptables参数详解
		
iptables参数详解 搬运工:尹正杰 注:此片文章来源于linux社区. Iptalbes 是用来设置.维护和检查Linux内核的IP包过滤规则的. 可以定义不同的表,每个表都包含几个内部的链,也 ...
 - CentOS 6.5 iptables原理详解以及功能说明
		
CentOS 6.5 iptables原理详解以及功能说明 来源 https://blog.51cto.com/tanxw/1389114 前言 iptables其实就是Linux下的一个开源的信息过 ...
 
随机推荐
- 学习笔记:filter_var()函数
			
PHP 过滤器用于对来自非安全来源的数据(比如用户输入)进行验证和过滤 filter_var() 函数通过指定的过滤器过滤变量. 如果成功,则返回已过滤的数据,如果失败,则返回 false. 语法 f ...
 - 13 Connectors: show contrast/oppistion
			
1 "but" 和 "yet" 用来显示两个意思之间的对比关系.在写作中,当 "but" 和"yet" 将两个分句连为一 ...
 - php 将数组转换网址URL参数
			
$array =array ( 'id' =123, 'name' = 'dopost' );echo http_build_query( $array );//得到结果id=123name=dopo ...
 - IWMS后台上传文章,嵌入视频,调用优酷通用代码
			
<a href="http://player.youku.com/player.php/sid/XODcxNjM3OTYw/v.swf " target="_bla ...
 - Yii2的save()方法容易出错的地方
			
如果save()返回true, 但是数据没有保存成功,则应该是开启了事务且已经回滚 如果save()返回false, 则使用$model->errors查看错误原因 可以设置$model的场景, ...
 - 阿里云 ECS 安全组
			
以前在案例云买的ECS我一般都是 连上 ssh,然后把网站文件拿上去 ,安装好需要的环境 然后就可以顺利的打开网站了,这次帮一个朋友买的阿里云ECS让我蒙了, 一切都准备好了 网站打不开 防火墙也检查 ...
 - 遍历map中的内容
			
Map<String, CartItem> cartItems = cart.getCartItems();for(Map.Entry<String, CartItem> en ...
 - VS Code 编辑器
			
使用VS Code 编辑器有一段时间了,感觉非常好用,已经成为了我的第一选择了.现在需要学习了一下了. 1,更改编辑器的默认设置 文件 =>首选项 => 设置 或 ctrl + ,(逗号) ...
 - CSS3 flexbox 布局 ---- flex项目属性介绍
			
现在介绍用在flex项目上的css 属性,html结构还是用ul, li 结构,不过内容改成1,2,3, 样式的话,直接把给 ul 设display:flex 变成flex 容器,默认主轴的方向为水平 ...
 - Android View相关知识问答
			
Android View相关核心知识问答 Activity Window View之间的三角关系 你真的了解View的坐标吗? 在渲染前获取 View 的宽高 5种手势工具类 浅析Android的窗口