#!/bin/sh
#
# Copyright (C) Vitaly Protsko <villy@sft.ru> errno=
# get_fieldval gate src "$(/usr/sbin/ip route get $4)"
# 获取字段的值,
#

#  ip route get `nslookup www.xiaohuamao.top |awk 'NR == 5 {print $3}'`
#  47.100.200.1 via 192.168.254.254 dev eth5 src 192.168.254.127

# 调用这个函数就是给第一个参数赋值,找到源地址
get_fieldval() {
local __data="$3"
local __rest test -z "$1" && return ## 测试第一个参数是否为空 while true ; do
__rest=${__data#* }
test "$__rest" = "$__data" && break if [ "${__data/ *}" = "$2" ]; then ## 找他的源地址 src
eval "$1=${__rest/ *}"
break
fi __data="$__rest"
done
}
# 这个函数是管理防墙的
# 调用方式 manage_fw add $confIntZone $confExtZone "$remnet"
# lan wan
# config_get confExtZone "$1" ext_zone wan 获取那个配置文件的,那个option 不用管section
#
# 防火墙的规则是要分析的
manage_fw() {
local cmd=/usr/sbin/iptables
local mode
local item if [ -z "$4" ]; then
$log "Bad usage of manage_fw"
errno=; return
fi case "$1" in
add|up|) mode=A ;;
del|down|) mode=D ;;
*) return ;;
esac for item in $ ; do
$cmd -$mode forwarding_$2_rule -s $item -j ACCEPT
$cmd -$mode output_$3_rule -d $item -j ACCEPT
$cmd -$mode forwarding_$3_rule -d $item -j ACCEPT
$cmd -t nat -$mode postrouting_$3_rule -d $item -j ACCEPT
done
} # manage_sa add "$locnet" "$remnet" $remote
# option local_net '0.0.0.0/31'
# option remote_net '0.0.0.0/31'
# option remote 'anonymous'
# 这个函数是管理安全通道的
# ipsec 需要定义两个局域网 192.168.1.1/24 10.10.10.0/24 你的两台主机要在这个范围内进行通信才会触发
# 除了局域网还需要两个局域网对应的网关, 就是以前的setkey -f ipsec.conf
manage_sa() {
local spdcmd
local rtcmd
local gate
local litem
local ritem if [ -z "$4" ]; then
$log "Bad usage of manage_sa"
errno=; return
fi case "$1" in
add|up|) spdcmd=add; rtcmd=add ;;
del|down|) spdcmd=delete; rtcmd=del ;;
*) errno=; return ;;
esac get_fieldval gate src "$(/usr/sbin/ip route get $4)"
if [ -z "$gate" ]; then
$log "Can not find outbound IP for $4"
errno=; return
fi for litem in $ ; do
for ritem in $ ; do
echo "
spd$spdcmd $litem $ritem any -P out ipsec esp/tunnel/$gate-$/require;
spd$spdcmd $ritem $litem any -P in ipsec esp/tunnel/$-$gate/require;
" | /usr/sbin/setkey -c 1>&2
done
done test -n "$5" && gate=$ for ritem in $ ; do
(sleep ; /usr/sbin/ip route $rtcmd $ritem via $gate) &
done
} manage_nonesa() {
local spdcmd
local item
local cout cin if [ -z "$4" ]; then
$log "Bad usage of manage_nonesa"
errno=; return
fi case "$1" in
add|up|) spdcmd=add ;;
del|down|) spdcmd=delete ;;
*) errno=; return ;;
esac case "$2" in
local|remote) ;;
*) errno=; return ;;
esac for item in $ ; do
if [ "$2" = "local" ]; then
cout="$4 $item"
cin="$item $4"
else
cout="$item $4"
cin="$4 $item"
fi
echo "
spd$spdcmd $cout any -P out none;
spd$spdcmd $cin any -P in none;
" | /usr/sbin/setkey -c 1>&2
done
} . /lib/functions/network.sh # 这个文件也要分析下 get_zoneiflist() {
local item
local data
local addr item=
data=$(uci get firewall.@zone[].name)
while [ -n "$data" ]; do
test "$data" = "$1" && break
let "item=$item+1"
data=$(uci get firewall.@zone[$item].name)
done if [ -z "$data" ]; then
errno=
return $errno
fi
data=$(uci get firewall.@zone[$item].network) echo "$data"
} get_zoneiplist() {
local item
local addr
local data
local result data=$(get_zoneiflist $)
test $? -gt -o $errno -gt -o -z "$data" && return $errno for item in $data ; do
if network_is_up $item ; then
network_get_ipaddrs addr $item
test $? -eq && result="$result $addr"
fi
done result=$(echo $result)
echo "$result"
} # EOF /etc/racoon/functions.sh

openwrt_ipsec_function.sh 分析的更多相关文章

  1. freescale-sdk linux移植一搭建编译环境脚本host-prepare.sh分析

    接下来使用自己的课外歇息时间,对基于PowerPC架构freescale-sdk,进行linux移植和分析.主要參考官方文档freescale linux sdk START_HERE.html,首先 ...

  2. quick: setup_mac.sh分析

    //quick: setup_mac.sh分析 //quick: setup_mac.sh分析#!/bin/bash //获取并打印根目录QUICK_V3_ROOTDIR="$( cd &q ...

  3. openstack(liberty): devstack之stack.sh分析

    学习openstack,从devstack入手,是个不错的选择.devstack中,首先需要分析stack.sh都做了些什么! 这里面涉及到了很多shell的基础知识.我就做个简单的梳理,方便后续查阅 ...

  4. RocketMQ runbroker.sh 分析JVM启动参数

    runbroker.sh #====================================================================================== ...

  5. [转载]Android 编译环境 build/envsetup.sh分析

    2013-12-23 11:28:40 转载自: http://blog.csdn.net/evilcode/article/details/7005757 请到转载地址阅读原文, 转载以备查询.

  6. Spark 个人实战系列(2)--Spark 服务脚本分析

    前言: spark最近非常的火热, 本文不讲spark原理, 而是研究spark集群搭建和服务的脚本是如何编写的, 管中窥豹, 希望从运行脚本的角度去理解spark集群. 研究的spark为1.0.1 ...

  7. Tomcat启动分析(一)-从脚本到main函数分析

    当我们在Linux下启动tomcat的时候,通过ps查看其进程信息为,接下来的内容我们就以此进行分析: [tomcat@fdd ~]$ ps -ef |grep java tomcat : tty1 ...

  8. 【shell脚本】定时备份日志===logBackup.sh

    定时备份日志 设置执行权限 [root@VM_0_10_centos shellScript]# chmod a+x logBackup,sh 脚本内容 [root@VM_0_10_centos sh ...

  9. J2EE相关总结

    Java Commons The Java™ Tutorials: http://docs.oracle.com/javase/tutorial/index.html Java Platform, E ...

随机推荐

  1. JAVA 实现数据导入Phoenix

    需要导入的jar 包有: 实现代码: package cn.test; import java.sql.Connection; import java.sql.DriverManager; impor ...

  2. java-day22

    数据库设计的范式         * 概念:设计数据库时,需要遵循的一些规范.要遵循后边的范式要求,必须先遵循前边的所有范式要求 设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,这些不 ...

  3. 关于springmvc与ajax的交互-开发记录

    每次都栽在这个地方,好衰! 在jsp页面的<form>标签设置了action="请求url" ,button那里用js进行监听,点击触发ajax方法,将前台数据传到后台 ...

  4. xinetd - 扩展的互联网服务守护进程

    总览 SYNOPSIS xinetd [options] 描述 DESCRIPTION xinetd 执行与 inetd 相同的任务:它启动提供互联网服务的程序.与在系统初始化时启动这些服务器,让它们 ...

  5. 最基础知识 sql之left join、right join、inner join的区别

    sql之left join.right join.inner join的区别 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括 ...

  6. Java.util.Map的实现类有那些?

    1.HashMap 2.Hashtable 3.LinkedHashMap 4.TreeMap

  7. Python 封装一个函数,查找文字字符串数字英文下标

    def abc(str,data): count = [] numMax = 0 for a in range(len(str)): if a == 0: temp = str.find(data, ...

  8. js数据访问的艺术

    数据访问js无时不刻所要做的事情,提高对数据的访问效率对一般的小的程序来说,对性能并不会有明显的改善.但是对像淘宝这样项目巨大,访问量巨大的网站来说,一个数据访问效率的提高对性能来说可能产生很大提升. ...

  9. 简单介绍下怎么在spring中使用RabbitMQ

    这篇文章主要介绍了简单了解如何在spring中使用RabbitMQ,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 常见的消息中间件产品: (1)Ac ...

  10. 2018年阿里云NoSQL数据库大事盘点

    NoSQL一词最早出现在1998年.2009年Last.fm的Johan Oskarsson发起了一次关于分布式开源数据库的讨论,来自Rackspace的Eric Evans再次提出了NoSQL概念, ...