OpenWrt-Shadowsocks linux bash代码研读

原创 2015年11月18日 14:59:03

Project git url: https://github.com/shadowsocks/openwrt-shadowsocks
包含 ss-{local,redir,tunnel} 三个可执行文件 
默认启动 ss-local 建立本地 SOCKS 代理
shadowsocks-libev-spec 为针对 OpenWrt 路由器的优化版本包含 ss-{redir,rules,tunnel} 三个可执行文件 
ss-redir 建立透明代理, ss-tunnel 做 DNS 查询转发 
ss-tunnel 默认转发 127.0.0.1:5353 至 8.8.4.4:53通过 ShadowSocks 服务器查询 DNS 用于线路优化 
ss-rules 可设置 ignore.list 中的 IP 流量不走代理 
ss-rules 可支持 ipset 和 iptables 两种转发规则 
默认使用性能更好的 ipset 规则, 对不支持的设备使用 iptables


if [ -n "$lan_ac_ip" ]; then
	case $lan_ac_mode in
		1) ac_args="w$lan_ac_ip"
		;;
		2) ac_args="b$lan_ac_ip"
		;;
	esac
fi

上面的代码展示了bash中 if 和 case 的用法, 另外bash中也有else 和 elif 这两个关键词.注意if后面要加一个"then"



: ${timeout:=60}

这段代码的意思是如果目前没有定义过timeout这个变量的话, 就把它定义为 60


cat <<-EOF >$CONFIG_FILE

cat << EOF表示从stdin中读取,当读到EOF时终止, 而-EOF是指如果读到 制表符 加上 EOF 的话也终止, 最后把结果输出到$CONFIG_FILE中.


[ "$tunnel_enable" = 1 ] && start_tunnel

&&符号的意思是当左边的命令成功时才执行右边的命令. 注: 在linux bash中0表示true

此外还有一个 || 表示左边命令失败时才执行右边的命令.


	ipset -! -R <<-EOF || return 1
		create ss_spec_lan_ac hash:net
		$(for ip in ${LAN_AC_IP:1}; do echo "add ss_spec_lan_ac $ip"; done)
EOF
ipset 是iptables的一个扩展, 用于方便管理大量IP的出入规则. -! 表示忽略一些重复添加的或者删除已经被删过的规则时发生的错误. -R表示从标准输入中读取.第二行和第三行表示创建了一个ip的集合,并向其中添加了若干IP.


iptables -t nat -A PREROUTING -p tcp -m set ! --match-set ss_spec_lan_ac src -m comment --comment "_SS_SPEC_RULE_" -j SS_SPEC_WAN_AC
iptables就是一个具体的防火墙了, "-t nat"表示应用范围在nat转发方面, "-A PREOUNTING"表示添加一条在转发前生效的规则,"-p tcp"表示对tcp协议应用规则, "-m set ! --match-set ss_spec_lan_ac src"是装了ipset以后才有的扩展的参数. 表示针对源地址(src)不是(感叹号)ss_spec_lan_ac集合中的ip包才应用规则. "-m comment"是加上注释. "-j"就是指明具体应用哪一条规则了.可以使用命令 "iptables -t nat -L" 来看所有的规则.

备注:

iptables-save 可以把目前iptables的规则输出到标准输出, 可以通过-t来指定输出哪个表

还有一篇文章值得研究: http://felixqu.com/2015/07/27/tomato-arm-jffs-entware-shadowsocks/

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

NETGEAR WNDR 4300路由器刷OpenWrt固件以及Shadowsocks+ChinaDNS配置教程总结

NETGEAR WNDR4300硬件分两种版本,只有CPU为AR系列的版本才可以刷OpenWrt。 硬件版本区别图 国行只有v1,美行分v1和v2,购买时注意甄别。以OpenWrt官方固件为例,适...

二级路由翻wall过程记录(openwrt+shadowsocks+chinadns+iptables方案)

GoAgent最近被封的越来越悲惨,能用但不怎么稳定,所以采用时下最流行的ss方案,仅涉及到客户端的安装配置,server端本文不考虑(直接买的ss账号),全过程略曲折,故记录下来,留作备忘....
  • ferstar
  • ferstar
  • 2014年12月29日 13:13
  • 8001

linux下bash shell C语言实现 代码4.1版

  • 2010年04月21日 14:11
  • 6.29MB
  • 下载

linux bash远程执行代码漏洞的补丁

  • 2014年10月20日 12:41
  • 8.64MB
  • 下载

Linux命令行下使用Shadowsocks

基本的库安装 centos: yum install m2crypto git ubuntu/debian: apt-get install m2crypto git 获取源代码 git c...

Linux下使用shadowsocks(以ubuntu16.04为例,非服务器)

系统环境:Ubuntu 16.04 安装Linux不同的发行版执行的命令如下(最好在root下运行以下命令,原因我下面会说明):Debian / Ubuntu: apt-get install py...

Linux下使用shadowsocks穿墙教程

Linux下用shadowsocks穿墙教程,使用chrome浏览器配置自动切换模式,并设置开机启动项。...

Linux下使用shadowsocks

最近由于工作原因,需要去使用几个开源的框架,包括go和python的框架,经过的人肯定知道,在window下编译某些框架是多么让人的痛苦,于是,干脆一狠心,讲自己的电脑换成了linux,这时候同事介绍...

在Linux服务器上搭设shadowsocks的方法

在Linux服务器上搭设shadowsocks的方法 Ubuntu 配置并运行
  • Pinefzs
  • Pinefzs
  • 2017年03月25日 16:24
  • 474

[笔记]我的Linux入门之路 - 02.Shadowsocks-Qt5配置

作为一个学习中的程序员,查wiki等,科学上网肯定是刚需。况且没有它很多东西都下不下来。我在windows环境下使用的是shadowsocks,那么在linux下也使用它。一、SS版本SS版本众多,而...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OpenWrt-Shadowsocks linux bash代码研读
举报原因:
原因补充:

(最多只允许输入30个字)