LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 3245|回复: 16

策略路由双网代理上网

[复制链接]
发表于 2005-6-23 22:51:39 | 显示全部楼层 |阅读模式
系统为Debian Sarge

双网要比单网复杂的多。

首先安装Linux高级路由包,用里面的ip命令。
# apt-get install iproute

先创建两个表

修改/etc/iproute2/rt_tables如下

  1. #
  2. # reserved values
  3. #
  4. 255 local
  5. 254 main
  6. 253 default
  7. 0   unspec
  8. #
  9. # local
  10. #
  11. 10  T1
  12. 20  T2
复制代码


然后将附件里的cnc_1_net和ctc_1_net拷贝到/etc目录下,因为下面的脚本要用到。
cnc_1_net是网通的ip段
ctc_1_net是电信的ip段
都不是很全,谁有全的希望能贡献出来,不胜感激 :)

我们要编辑个脚本。



  1. #!/bin/sh


  2. # IF1 是网通的网络接口
  3. IF1="eth0"

  4. # IF2 是内网的网络接口
  5. IF2="eth2"

  6. # IF0 是电信的网络接口
  7. IF0="eth1"

  8. # IP1 是网通的IP
  9. IP1="221.8.60.54"

  10. # IP2 是电信的IP
  11. IP2="222.168.11.186"

  12. # P1 是网通的网关
  13. P1="221.8.60.53"

  14. # P2 是电信的网关
  15. P2="222.168.11.185"


  16. # P1_NET 是网通的网段, 掩码30表示有分派了4个ip, 如果是8个ip就要写成29了。
  17. P1_NET="221.8.60.52/30"

  18. # P2_NET 为电信的网段
  19. P2_NET="222.168.11.184/30"

  20. # P0_NET 为内网网段
  21. P0_NET="192.168.0.0/24"


  22. # 设置基本的防火墙

  23. echo "1" > /proc/sys/net/ipv4/ip_forward
  24. echo 8000 > /proc/sys/net/ipv4/ip_conntrack_max

  25. modprobe iptable_filter
  26. modprobe ip_tables
  27. modprobe iptable_nat
  28. modprobe ip_conntrack
  29. modprobe ip_nat_ftp
  30. modprobe ip_conntrack_ftp
  31. modprobe ip_nat_irc
  32. modprobe ip_conntrack_irc
  33. modprobe ipt_MASQUERADE

  34. modprobe ipt_REJECT
  35. modprobe ipt_limit


  36. iptables -F
  37. iptables -t nat -F
  38. iptables -P INPUT DROP
  39. iptables -P FORWARD ACCEPT
  40. iptables -P OUTPUT ACCEPT

  41. iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  42. iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
  43. iptables -A INPUT -i lo -j ACCEPT
  44. iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
  45. iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
  46. iptables -t nat -A POSTROUTING -s $P0_NET -o $IF1 -j MASQUERADE
  47. iptables -t nat -A POSTROUTING -s $P0_NET -o $IF2 -j MASQUERADE

  48. # 设置策略路由

  49. ip route flush table T1
  50. ip route flush table T2

  51. ip rule list | grep T | while read line; do
  52.     POS4=`echo $line | awk '{print $4}'`
  53.     if [ "$POS4" = "to" ]
  54.     then
  55.         DST=`echo $line | awk '{print $5}'`
  56.         RT=`echo $line | awk '{print $7}'`
  57.         ip rule del to $DST table $RT
  58.     fi
  59.     if [ "$POS4" = "lookup" ]
  60.     then
  61.         SRC=`echo $line | awk '{print $3}'`
  62.         RT=`echo $line | awk '{print $5}'`
  63.         ip rule del from $SRC table $RT
  64.     fi
  65. done

  66. if [ ! -z $IP1 ]
  67. then
  68.     ip route replace $P1_NET dev $IF1 src $IP1

  69.     ip route add $P1_NET dev $IF1 src $IP1 table T1
  70.     ip route add $P0_NET dev $IF0 table T1
  71.     ip route add 127.0.0.0/8 dev lo table T1

  72.     ip route add $P1_NET dev $IF1 table T2

  73.     ip route replace default via $P1 dev $IF1 table T1

  74.     ip rule add from $IP1 table T1

  75.     WAN_RT1="nexthop via $P1 dev $IF1 weight 1"
  76. fi
  77. if [ ! -z $IP2 ]
  78. then
  79.     ip route replace $P2_NET dev $IF2 src $IP2

  80.     ip route add $P2_NET dev $IF2 src $IP2 table T2
  81.     ip route add $P0_NET dev $IF0 table T2
  82.     ip route add 127.0.0.0/8 dev lo table T2

  83.     ip route add $P2_NET dev $IF2 table T1

  84.     ip route replace default via $P2 dev $IF2 table T2

  85.     ip rule add from $IP2 table T2

  86.     WAN_RT2="nexthop via $P2 dev $IF2 weight 1"
  87. fi

  88. WAN_RT3="$WAN_RT1 $WAN_RT2"

  89. # 把网通作为默认网关
  90. ip route replace default scope global $WAN_RT1

  91. # 用两个网关做负载均衡
  92. #ip route replace default equalize scope global $WAN_RT3

  93. ip route flush cache

  94. if [ -s /etc/ctc_1_net ]
  95. then
  96.     while read LINE
  97.     do
  98.         case $LINE in
  99.         \#*) ;;
  100.         *)
  101.             ip rule add to $LINE table T2
  102.             ;;
  103.         esac
  104.     done < /etc/ctc_1_net
  105. fi

  106. if [ -s /etc/cnc_1_net ]
  107. then
  108.     while read LINE
  109.     do
  110.         case $LINE in
  111.         \#*) ;;
  112.         *)
  113.             ip rule add to $LINE table T1
  114.             ;;
  115.         esac
  116.     done < /etc/cnc_1_net
  117. fi

  118. ip route flush cache

复制代码


这个脚本是在实际的双网代理服务器上抽出来的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2005-6-23 23:08:33 | 显示全部楼层
不错,占个板凳学习学习。
其实比较关键的问题是如何能收集到大部分网通与电信的路由信息(也就是网段)。
回复 支持 反对

使用道具 举报

发表于 2005-6-23 23:16:28 | 显示全部楼层
赞个~ 向trotk同学学习
回复 支持 反对

使用道具 举报

发表于 2005-6-24 00:27:44 | 显示全部楼层
好东西,希望写的更详细一点!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-6-24 08:29:51 | 显示全部楼层

  1.              +------------+
  2.              | 进入的IP包 |
  3.              +------------+
  4.                    |
  5.                    |
  6.                    V
  7.              +--------------+
  8.              | 决定包该走   |    - - - - - - - - - ->$ ip rule list
  9.              | 哪个表       |                          0:      from all lookup local
  10.              +--------------+                          32388:  from all to 219.235.127.0/24 lookup T1
  11.                     |                                  32389:  from all to 219.156.123.0/24 lookup T1
  12.                     |                                  ..............
  13.                     |
  14.         +-----------------------+                      32388:  from all to 219.235.127.0/24 lookup T1
  15.         |                       |                      32389是规则的序号, 越高就越先执行
  16.         V                       V                      规则就很简单了, 目的地是219.235.127.0/24的所有ip包,查看T1表
  17.   +--------------+       +--------------+
  18.   | 网通路由表 T1|       | 电信路由表 T2|   - - - - ->$ ip route list table T1
  19.   +--------------+       +--------------+               222.168.11.184/30 dev eth2  scope link
  20.         |                       |                       221.8.60.52/30 dev eth0  scope link  src 221.8.60.54
  21.         V                       V                       192.168.0.0/24 dev eth1  scope link
  22.         -------------------------                       127.0.0.0/8 dev lo  scope link
  23.                    |                                    default via 221.8.60.53 dev eth0
  24.                    |
  25.                    |                                    222.168.11.184/30 dev eth2  scope link
  26.                    |                                    所有是电信的走eth2, 因为222.168.11.184/30是我们申请的
  27.                    |                                    电信ip段,所以一定没错, 以防ctc_1_net不全。
  28.                    V                                    221.8.60.52/30 dev eth0  scope link  src 221.8.60.54
  29.             +---------------+                           就是对网通说的了
  30.             | iptables 的   |                           192.168.0.0/24 dev eth1  scope link 是内网
  31.             | POSTROUTING 链|
  32.             | 修改源地址    |                           127.0.0.0/8 dev lo  scope link 本机
  33.             +---------------+
  34.                    |                                    default via 221.8.60.53 dev eth0 默认走网通路由
  35.                    |                                    这句才是最关键的 :)
  36.                    |
  37.                    |
  38.                    |
  39.                    V
  40.        +-------------------------+
  41.        |                         |
  42.        V                         V
  43.    网通的NIC                 电信的NIC
复制代码


参考资料:
http://lartc.org/
回复 支持 反对

使用道具 举报

发表于 2005-6-24 09:02:27 | 显示全部楼层
建议加精!!!
回复 支持 反对

使用道具 举报

发表于 2005-6-24 11:11:19 | 显示全部楼层
非常不错
回复 支持 反对

使用道具 举报

发表于 2005-6-24 13:08:12 | 显示全部楼层
Post by memory
不错,占个板凳学习学习。
其实比较关键的问题是如何能收集到大部分网通与电信的路由信息(也就是网段)。


ftp://ftp.apnic.net/public/whois ... apnic.db.inetnum.gz
回复 支持 反对

使用道具 举报

发表于 2005-6-24 15:51:15 | 显示全部楼层
好,学习学习,谢谢
回复 支持 反对

使用道具 举报

发表于 2005-6-24 15:58:00 | 显示全部楼层
谢谢分享 !
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表