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 ...
随机推荐
- PHP对象在内存中的分配(转载)
http://www.cnblogs.com/hongfei/archive/2012/06/12/2547120.html 对像在PHP 里面和整型.浮点型一样,也是一种数据类,都是存储不同类型数据 ...
- keepalived高可用haproxy负载均衡varnish缓存wordpress的动静分离(第一次配置成功)
haproxy和nginx都可以作为七层和四层反代服务器对外提供服务,此文通过haproxy和keealived配置varnish搭建wordpress的动静分离站点 一.实验环境 五台虚拟机: ha ...
- 38-Ubuntu-用户管理-03-usermod指定用户登录shell
简记: 所谓shell就是可以输入终端命令的窗口,shell是一个软件. 1.Ubuntu终端shell介绍 summmer@summmer-virtual-machine:~/桌面$ summmer ...
- 最长递增子序列nlogn的做法
费了好大劲写完的 用线段树维护的 nlogn的做法再看了一下 大神们写的 nlogn 额差的好远我写的又多又慢 大神们写的又少又快时间 空间 代码量 哪个都赶不上大佬们的代码 //这是我写的 ...
- pytest-mark跳过
import pytestimport sysenvironment='android' @pytest.mark.skipif(environment=="android",re ...
- mysql数据库 --表查询
今日内容: 一.单表查询 1.语法执行顺序 2.where约束条件 3.group by 4.having 5.distinct 6.order by 7.limit 8.正则 二.多表查询 1.表查 ...
- MySQL数据库 -- Navicat、pycharm连接数据库
内容目录 1.Navicat使用 2.pycharm使用数据库 一.Navicat使用 #1. 测试+链接数据库 #2. 新建库 #3. 新建表,新增字段+类型+约束 #4. 设计表:外键 #5. 新 ...
- redis 分析rdb中key
1.问题: 单位一个redis集群内存报警,想找出所有的key的列表? 2.解决办法: 网上搜索是可以用redis-rdb-tools 这个工具进行分析 (1)centos6 默认安装python2. ...
- 如何在Windows10操作系统下安装superset步骤分享
superset是一个轻量级自助式BI框架,以优雅的界面和根据数据表动态生成数据为主要特点. 一. 环境 windows 10 64位 Python 3.7 二. 安装步骤 安装Python 建议安装 ...
- sublime上插件的安装与使用
1.插件安装的方式 插件安装方式一:直接安装 下载插件安装包后,把安装包解压到packages目录(菜单->首选项->浏览插件目录)中,完成安装 插件安装方法二:使用package con ...