openwrt_ipsec_function.sh 分析
#!/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 分析的更多相关文章
- freescale-sdk linux移植一搭建编译环境脚本host-prepare.sh分析
接下来使用自己的课外歇息时间,对基于PowerPC架构freescale-sdk,进行linux移植和分析.主要參考官方文档freescale linux sdk START_HERE.html,首先 ...
- quick: setup_mac.sh分析
//quick: setup_mac.sh分析 //quick: setup_mac.sh分析#!/bin/bash //获取并打印根目录QUICK_V3_ROOTDIR="$( cd &q ...
- openstack(liberty): devstack之stack.sh分析
学习openstack,从devstack入手,是个不错的选择.devstack中,首先需要分析stack.sh都做了些什么! 这里面涉及到了很多shell的基础知识.我就做个简单的梳理,方便后续查阅 ...
- RocketMQ runbroker.sh 分析JVM启动参数
runbroker.sh #====================================================================================== ...
- [转载]Android 编译环境 build/envsetup.sh分析
2013-12-23 11:28:40 转载自: http://blog.csdn.net/evilcode/article/details/7005757 请到转载地址阅读原文, 转载以备查询.
- Spark 个人实战系列(2)--Spark 服务脚本分析
前言: spark最近非常的火热, 本文不讲spark原理, 而是研究spark集群搭建和服务的脚本是如何编写的, 管中窥豹, 希望从运行脚本的角度去理解spark集群. 研究的spark为1.0.1 ...
- Tomcat启动分析(一)-从脚本到main函数分析
当我们在Linux下启动tomcat的时候,通过ps查看其进程信息为,接下来的内容我们就以此进行分析: [tomcat@fdd ~]$ ps -ef |grep java tomcat : tty1 ...
- 【shell脚本】定时备份日志===logBackup.sh
定时备份日志 设置执行权限 [root@VM_0_10_centos shellScript]# chmod a+x logBackup,sh 脚本内容 [root@VM_0_10_centos sh ...
- J2EE相关总结
Java Commons The Java™ Tutorials: http://docs.oracle.com/javase/tutorial/index.html Java Platform, E ...
随机推荐
- background-size的值cover、contain和100%
图1 给一个宽600px,高600px的div添加一张宽480px,高360px的背景图片.不重复显示的情况下,默认显示为图1. 1.background-size: 100% 100%; 会将图片的 ...
- HTTP信息头处理器
就是HTTP请求头-Header
- 推荐20个让你学习并精通CSS的网站
1. A List Apart CSS Topics A List Apart,学习网页设计和最佳实践的首选网站.这个网站从1999年就开始发表关于CSS的文章,其中大部分文章都是面向那些更注重符合标 ...
- Pregel 消息传递机制
- leetcood学习笔记-110-平衡二叉树
---恢复内容开始--- 题目描述: 方法一: class Solution(object): def isBalanced(self, root): """ :type ...
- Batch - FINDSTR
总结 Searches for strings in files. 在文件中寻找特定的字符串 官方文档 C:\Users\cuixunxu>FINDSTR /? Searches for str ...
- c++ exit() 函数
函数用法 编辑 函数名: exit() 所在头文件:stdlib.h(如果是”VC6.0“的话头文件为:windows.h) 功 能: 关闭所有文件,终止正在执行的进程. exit(0)表示正常退出, ...
- Java面向对象的特征一:封装性
1.4 面向对象的特征一:封装性 当创建了类的对象以后,如果直接通过"对象.属性"的方式对相应的对象属性赋值的话,可能会出现不满足实际情况的意外,我们考虑不让对象来直接作用属性,而 ...
- R语言 数据类型
R语言数据类型 通常,在使用任何编程语言进行编程时,您需要使用各种变量来存储各种信息. 变量只是保留值的存储位置. 这意味着,当你创建一个变量,你必须在内存中保留一些空间来存储它们. 您可能想存储各种 ...
- 前端 -- javas-基本语法/引用等
javas-基本语法/引用等 JavaScript介绍 JavaScript是运行在浏览器端的脚步语言,JavaScript主要解决的是前端与用户交互的问题,包括使用交互与数据交互. JavaScri ...