关闭

OpenWrt-Shadowsocks linux bash代码研读

1212人阅读 评论(0) 收藏 举报
分类:

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/

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:647725次
    • 积分:8378
    • 等级:
    • 排名:第2443名
    • 原创:218篇
    • 转载:41篇
    • 译文:1篇
    • 评论:72条
    文章分类