当服务器有电信、移动双线时,并且都需要直接对外提供服务,服务器需要做路由跟踪。电信用户访问电信线路,并从电信网关返回;移动用户访问移动线路,并从移动网关返回。服务器主动外连,走默认网关。
可以使用如下脚本进行配置,使用方法为:
IpRoute editer by K.C Date:Dec 09 2010 18:15:50
./IpRoute.sh [help] driver0:line:lineView:lineGateWay driver1:line:lineView:lineGateWay
./IpRoute.sh [help] 設備0:線路簡稱0:線路描述0:線路網關0 設備1:線路簡稱1:線路描述1:線路網關1
例:電信+移動
./IpRoute.sh eth0:TEL:TELCOME:x.x.x.x eth1:CM:CMCC:x.x.x.x
- #!/bin/bash
- #定義配置文件
- if [ ${1} = "help" ];then
- echo -e "IpRoute editer by K.C Date:Dec 09 2010 18:15:50\t"
- echo -e "${0} [help] driver0:line:lineView:lineGateWay driver1:line:lineView:lineGateWay\t"
- echo -e "${0} [help] 設備0:線路簡稱0:線路描述0:線路網關0 設備1:線路簡稱1:線路描述1:線路網關1 \n"
- echo -e "例:電信+移動\t"
- echo -e "${0} eth0:TEL:TELCOME:x.x.x.x eth1:CM:CMCC:x.x.x.x"
- exit
- fi
- rtTables="/etc/iproute2/rt_tables"
- GWFile="/etc/sysconfig/network"
- if [ ! -f ${rtTables} ];then
- echo "${rtTables} 文件不存在,請確認OS是否為RHEL linux ."
- exit 2
- fi
- scriptsPath="/root/scripts"
- flushRoute="${scriptsPath}/flushRoute.sh"
- if [ ! -d "${scriptsPath}" ];then
- echo -e "Make a scripts dir..\n"
- mkdir ${scriptsPath}
- fi
- #配置文件是否已被修改
- rtTablesTemp=`tail -1 ${rtTables}|awk '{print $2}'`
- if [ ${rtTablesTemp} != "inr.ruhep" ];then
- echo "請確認本機是否已做過IPROUTE."
- exit 2
- fi
- if [ ! -n "${1}" ];then
- echo "請輸入第一塊網卡參數,如 eth0:tel:telcom:x.x.x.x"
- exit 2
- else
- varCount=`echo "${1}"|awk -F":" '{print NF}'`
- if [ ${varCount} \< "4" ];then
- echo -e "你輸入的第一塊網卡參數(${1})有誤,請按以下格式重新輸入 設備:線路簡稱:線路描述:線路網關 .如電信線路請輸入 eth0:TEL:TELCOME:x.x.x.x\n"
- else
- eth0Dr=`echo ${1}|awk -F ":" '{print $1}'`
- eth0IP=`ifconfig ${eth0Dr}|grep "inet addr"|awk '{print $2}'|awk -F ":" '{print $2}'`
- if [ ! -n "${eth0IP}" ];then
- echo "獲取設備IP失敗,請檢查輸入參數是否為 設備:線路簡稱:線路描述:線路網關 ,eth0:TEL:TELCOME:x.x.x.x"
- exit 2
- fi
- eth0Line=`echo ${1}|awk -F ":" '{print $2}'`
- eth0LineView=`echo ${1}|awk -F ":" '{print $3}'`
- eth0GW=`echo ${1}|awk -F ":" '{print $4}'`
- fi
- fi
- if [ ! -n "$2" ];then
- echo "請輸入第二塊網卡參數,如 eth1:tel:telcom:x.x.x.x"
- exit 2
- else
- varCount=`echo "${2}"|awk -F":" '{print NF}'`
- if [ ${varCount} \< "4" ];then
- echo -e "你輸入的第二塊網卡參數(${2})有誤,請按以下格式重新輸入 設備:線路簡稱:線路描述:線路網關 .如移動線路請輸入 eth1:CM:CMCC:x.x.x.x\n"
- else
- eth1Dr=`echo ${2}|awk -F ":" '{print $1}'`
- eth1IP=`ifconfig ${eth1Dr}|grep "inet addr"|awk '{print $2}'|awk -F ":" '{print $2}'`
- if [ ! -n "${eth1IP}" ];then
- echo "獲取設備IP失敗,請檢查輸入參數是否為 設備:線路簡稱:線路描述:線路網關 ,eth1:CM:CMCC:x.x.x.x"
- exit 2
- fi
- eth1Line=`echo ${2}|awk -F ":" '{print $2}'`
- eth1LineView=`echo ${2}|awk -F ":" '{print $3}'`
- eth1GW=`echo ${2}|awk -F ":" '{print $4}'`
- fi
- fi
- #獲取默認網關
- GW=`cat ${GWFile}|grep "GATEWAY"|awk -F "=" '{print $2}'`
- if [ ! -n "${GW}" ];then
- echo "獲取默認網關失敗,請檢查 ${GWFile}"
- exit 2
- fi
- echo -e "請確認以下信息:\n"
- echo -e "第一塊網卡設備名稱: ${eth0Dr}\t"
- echo -e "第一塊網卡IP: ${eth0IP}\t"
- echo -e "第一塊綱卡線路簡稱: ${eth0Line}\t"
- echo -e "第一塊綱卡線路描述: ${eth0LineView}\t"
- echo -e "第一塊綱卡網關: ${eth0GW}\n"
- echo -e "第二塊網卡設備名稱: ${eth1Dr}\t"
- echo -e "第二塊網卡IP: ${eth1IP}\t"
- echo -e "第二塊綱卡線路簡稱: ${eth1Line}\t"
- echo -e "第二塊綱卡線路描述: ${eth1LineView}\t"
- echo -e "第二塊綱卡網關: ${eth1GW}\n"
- echo -e "默認網關: ${GW}\n"
- #創建路由刷新腳本
- echo "#!/bin/bash" > ${flushRoute}
- echo "ip route flush table ${eth0Line}" >> ${flushRoute}
- echo "ip route flush table ${eth1Line}" >> ${flushRoute}
- echo "ip route add default via ${eth0GW} dev $eth0Dr src $eth0IP table ${eth0Line}" >> ${flushRoute}
- echo "ip rule add from ${eth0IP} table ${eth0Line}" >> ${flushRoute}
- echo "ip route add default via ${eth1GW} dev $eth1Dr src $eth1IP table ${eth1Line}" >> ${flushRoute}
- echo "ip rule add from ${eth1IP} table ${eth1Line}" >> ${flushRoute}
- chmod 755 ${flushRoute}
- printf "請輸入\"yes\"確認信息並執行以下命令進行修改系統網絡,輸入\"no\"放棄修改系統網絡:"
- cat ${flushRoute}|grep -v "\#"
- read key
- case "${key}" in
- yes)
- #寫入配置文件
- echo -e "251 ${eth0Line} ${eth0LineView}" >> ${rtTables}
- echo -e "252 ${eth1Line} ${eth1LineView}" >> ${rtTables}
- #刷新路由
- ${flushRoute}
- rclocal=`cat /etc/rc.local|grep "${flushRoute}"`
- if [ ! -n "${rclocal}" ];then
- echo "${flushRoute}" >> /etc/rc.local
- fi
- ;;
- no)
- echo -e "以上信息沒有得到你的確認,退出本次網絡修改計劃.\t"
- exit 2
- ;;
- *)
- echo -e "你的輸入有誤,本次執行已結束,若需繼續,請再次執行."
- ;;
- esac
转载于:https://blog.51cto.com/kc1985/506463