#!/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虚拟机原理之Dalvik虚拟机(三)

    更多Android高级架构进阶视频学习请点击:https://space.bilibili.com/474380680 本文是Android虚拟机系列文章的第三篇,专门介绍Andorid系统上曾经使用 ...

  2. 8-vim-移动命令-03-段落切换和括号切换

    1.段落切换 vi使用空行来区分段落 在程序开发时,通常一段功能相关的代码会写在一起--之间没有空行 命令 功能 { 上一段 } 下一段 2.括号切换 在程序世界中,() [] {}使用频率很高,而且 ...

  3. vue中:key 和react 中key={} 的作用,以及ref的特性?

    vue中:key 和react 中key={} 为了给 vue 或者react 一个提示,以便它能跟踪每个节点的身份,从而重用和重新排序现有元素,你需要为每项提供一个唯一 key 属性 一句话概括就是 ...

  4. session复制

    环境描述:(三台服务器 系统:7.6)192.168.200.111 nginx192.168.200.112 tomcat192.168.200.113 tomcat环境配置:192.168.200 ...

  5. 50. Set接口和Set的实现类HashSet

    集合分类:-------------------| Collection 单列集合的根接口   ---------------| List 如果实现了List接口的集合类,具备的特点是:有序,可重复- ...

  6. 线程池 一 ScheduledThreadPoolExecutor

    java.util.concurrent public class ScheduledThreadPoolExecutor extends ThreadPoolExecutor implements ...

  7. Java Swing 窗体屏幕居中

    Java开发桌面程序用AWT或SWING,可以用设置主窗口位置,使主窗口居中一般使用下面的方法: 01.第一种方法              int windowWidth = frame.getWi ...

  8. delphi JPG转为BMP存入数据库

    delphi  JPG转为BMP存入数据库   必须在uses中引用JPEG procedure TForm1.BitBtn3Click(Sender: TObject);varjpg:TJPEGim ...

  9. 异或空间求基(模板)——hdu3949

    输出样例有点问题的.. #include<bits/stdc++.h> using namespace std; #define ll unsigned long long #define ...

  10. NX二次开发-UFUN获取圆柱的参数UF_MODL_ask_cylinder_parms

    NX11+VS2013 #include <uf.h> #include <uf_modl.h> #include <uf_ui.h> UF_initialize( ...