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 ...
随机推荐
- 在linux 下查询某个进程被那个程序占用
ps -ef|grep pid ps -aux | grep pid 清除linux 缓存: echo 1 > /proc/sys/vm/drop_caches
- 人工智能都能写Java了!这款插件让你编程更轻松
最近在浏览技术社区,发现了一款 IDE 插件,利用人工智能技术帮助程序员高效写代码.节省开发时间,一下子勾起了我的好奇心. 下载之后,使用一番,确实蛮好的,可以有效提升编程效率. 这款插件叫:aixc ...
- vue中:key 和react 中key={} 的作用,以及ref的特性?
vue中:key 和react 中key={} 为了给 vue 或者react 一个提示,以便它能跟踪每个节点的身份,从而重用和重新排序现有元素,你需要为每项提供一个唯一 key 属性 一句话概括就是 ...
- beforeEach的深入研究,及beforeEach和beforeRouteEnter区别?
之前一直困惑它俩的区别,也没找到合适的文档,直到有天看到一篇博客,一起来学习下: 之前是在created钩子函数里面,发现这是在今天当前页面之后了.先回顾一下钩子函数beforeEach const ...
- mysql数据库中某字段一部分乱码
笔者问题:mysql表(表中数据就是乱码,可能是插入时编码问题,这个问题以后解决)导出excel时数据中有乱码(但是在页面上查看是正常的),我们希望能导出一份没有中文乱码的excel 根据热力站中一次 ...
- GCloud SDK 遇到的错误记录
eclipse 环境 1.调用 SetAppInfo 方法返回 -1 语音id 和 key 设置正确 ,各种检测都没问题 解决办法 把安卓工程目录下 obj 文件价删除 ,把sdk 替换成以前能用的老 ...
- vSphere ESXi如何使用嵌套虚拟化(1-vSphere 6.0+linux虚拟化)
今天准备在vSphere当中上传一个用workstation做出来的虚拟机,没想到遇到了很多问题,在这里,作为新手小白碰到了一些问题,在这里总结一下. 1.workstation做出来的虚拟机直接上传 ...
- 浏览器http跳转至https问题
Chrome 浏览器 地址栏中输入 chrome://net-internals/#hsts 在 Delete domain security policies 中输入项目的域名,并 Delete 删 ...
- jenkins的安装和启用
1.下载Jenkins:下载地址:https://jenkins.io/zh/download/ 2.将Jenkins.war包上传到Tomcat的webapps目录下,本次的目录是/usr/loca ...
- C/C++ 智能指针
// 转载自 :https://www.cnblogs.com/wuyepeng/p/9741241.html { 为什么要使用智能指针:我们知道c++的内存管理是让很多人头疼的事,当我们写一个new ...