免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2965 | 回复: 8
打印 上一主题 下一主题

[网络管理] 请教版主策略路由的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-07-20 11:42 |只看该作者 |倒序浏览
本帖最后由 chinaunix874 于 2010-07-20 13:21 编辑

比如我的linux服务器有2块网卡,能做基于网卡的策略路由吗?

比如默认路由是网卡2,而通过网卡1访问linux的数据,还让返回的数据通过网卡1回去?

另外,有没有办法能够让本地发起的连接通过网卡1出去?比如默认路由在网卡2上,如果本地某个进程要访问互联网,要求从网卡1出去。

用ip rule的话,怎么写策略呢?

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
2 [报告]
发表于 2010-07-20 20:51 |只看该作者
http://lartc.org
楼主下载文档研究下

论坛徽章:
0
3 [报告]
发表于 2010-07-22 12:26 |只看该作者
多谢2楼,文档中找到一个办法。

#echo 20 mytable >> /etc/iproute2/rt_table
#cat route.sh
#!/bin/sh
NET=192.168.0.0/24
DEV=eth0
IP=192.168.0.100
GW=192.168.0.1

#route policy

ip route add $NET src $IP dev $DEV table mytable
ip route add default via $GW src $IP dev $DEV table mytable
ip rule add from $IP table mytable

但是问题就在于,如果这样做,改了接口IP地址的话,还得再改ip rule,能不能直接指明接口呢?这样,无论接口ip地址怎么变动,都没有影响了。

论坛徽章:
34
亥猪
日期:2015-03-20 13:55:11戌狗
日期:2015-03-20 13:57:01酉鸡
日期:2015-03-20 14:03:56未羊
日期:2015-03-20 14:18:30子鼠
日期:2015-03-20 14:20:14丑牛
日期:2015-03-20 14:20:31辰龙
日期:2015-03-20 14:35:34巳蛇
日期:2015-03-20 14:35:56操作系统版块每日发帖之星
日期:2015-11-06 06:20:00操作系统版块每日发帖之星
日期:2015-11-08 06:20:00操作系统版块每日发帖之星
日期:2015-11-19 06:20:00黄金圣斗士
日期:2015-11-24 10:43:13
4 [报告]
发表于 2010-07-22 13:44 |只看该作者
iptables 根据端口分配?

论坛徽章:
0
5 [报告]
发表于 2010-08-12 16:53 |只看该作者
1、在 Linux 网关上针对目的地址是 cernet 的打个 MARK1
2、在 DNAT 前把专门从 cernet 进来的数据也打 MARK1
3、在数据包出去选路的时候,把 MARK1 的指到 cernet 出口,其余一律默认走 chinanet

论坛徽章:
0
6 [报告]
发表于 2010-08-12 17:07 |只看该作者
1、在 Linux 网关上针对目的地址是 cernet 的打个 MARK1
2、在 DNAT 前把专门从 cernet 进来的数据也打 MA ...
platinum 发表于 2010-08-12 16:53


多谢白金。

第二条没有明白,为什么要在DNAT之前把专门从cernet进来的数据打标记?如果是这样,高级路由不就把这部分数据依然从cernet接口送回去了吗?

如果仅仅是chinanet上做DNAT,那我想可以用您说的第一种方法,就是不填加去cernet的静态路由,而是用高级路由的办法来做。
所有去目标地址是cernet的数据,打标记1,然后写一个ip rule,所有标记1的数据,通过cernet出口出去。
这样,即便从cernet访问chinanet上的DNAT,也只会匹配默认路由,从chinanet正确返回数据了。

但是实际网络可能会很复杂
比如在cernet上也做了相应的DNAT,那从任何地方访问这些DNAT地址,也会从chinanet返回,依然会有问题。

所以我想的是,能不能基于网络接口去做策略路由,比如从某个接口进来的数据,依然从哪个接口返回?

论坛徽章:
0
7 [报告]
发表于 2010-08-12 17:14 |只看该作者
可以,在 mangle 表的 PREROUTING 里匹配进来的接口,对 conntrack 作 MARK
出去的时候通过 CONNMARK 将 connection 中的 MARK save 到包中
之后通过高级路由根据数据包的 MARK 做出口选择

论坛徽章:
0
8 [报告]
发表于 2010-08-12 17:26 |只看该作者
做MARK的方法会不会影响性能?
我在3楼查到一个办法,是只用高级路由实现的,但是有限制是必须写接口的ip地址,有没有其他的用高级路由就能实现,而不需要用iptables打标的办法?

论坛徽章:
0
9 [报告]
发表于 2010-08-12 17:29 |只看该作者
几乎无损耗,仅仅修改数据包存储结构中的一个元素而已
MARK 的方法最灵活
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP