Ubuntu 搭建gfw路由器

用了七八年的华硕AC68U突然间没了信号,没辙只能再买一个,618看红米的AX3000只要一百多,就下手买了一台。到手以后才发现是256MB内存版本的,也不好装openwrt,就此作罢。在家有个无障碍的网络环境很重要,于是就想到用一台装了Ubuntu的笔记本来做NAT服务器,实现以前在路由器上同样的功能。

首先安装openconnect以及dnsmasq,ipset

sudo apt install dnsmasq ipset openconnect

编辑/etc/sysctl.conf ,将net.ipv4.ip_forward=1,编辑完成后执行sysctl -p 以便生效

在/root/bin/下面创建ocserv.sh文件,

_server 为ocserv服务器地址,

_cert为服务器ssl证书的hash,如果不知道执行一次openconnec连接就可以看到。

_ocserv_passwd 为密码

#!/bin/sh
export GOGC=20
_server='xxx.xxx.xx.xxx:1234'
_cert="pin-sha256:KAEiO0Yfdsjojojijlkjiohjjwohoa;jhl="
_ocserv_passwd="fs2all"
log()
{

_date=`date`

echo ${_date} ' - ' $*
}



Check_internet()
{
_wc=`ifconfig |grep ppp0|wc -l`

if [ $_wc -eq 0 ]
then
log "No internet Connect, exiting"
exit
fi
}

Check_VPN_PROC()
{
_wc=`ps -ef|grep openconnect|grep -v grep|wc -l`                                                                                                                                               
if [ $_wc -eq 0 ]                    
then       
date                                                                                                      
echo $_ocserv_passwd |openconnect -b --authgroup=yourgroup--servercert $_cert  -u username $_server
log "Start openconnect connection."
sleep 5
fi
}




Check_VPN_Conn()
{
_wc=`ifconfig |grep tun0|wc -l`
                 
if [ $_wc -eq 0 ]      
then
log "No VPN Connection, exiting."                   
exit
fi
}

Check_timeout()
{
ping -c 5 192.168.8.1 > 1.tmp
P1=$(cat 1.tmp| grep 'loss' | awk -F ',' '{ print $3 }' | awk -F "%" '{ print $1 }')
if [ $P1 -gt 80 ]
then
cat 1.tmp
log "VPN Connection timeout, kill Openconnect. "
pid=`ps |grep openconnect |grep authgroup|awk '{print $1}'`
if [ $pid"x" != "x" ]
        then
        kill $pid
fi



fi
}

Check_Dnsmasq()
{
_wc=`ps |grep dnsmasq|wc -l`

if [ $_wc -eq 1 ]
then
log "Restart Dnsmasq."
dnsmasq --log-async
fi
}

Check_dns_route()
{
_wc=`ip route |grep 1.1.1.1|wc -l`       
               
if [ $_wc -eq 0 ]
then     
log "Add DNS IP Route."                            
ip route add 1.1.1.1 dev tun0
fi 
}

Check_ipset()
{
modprobe xt_set

_wc=`ipset list |grep gfwlist |wc -l`

if [ $_wc -eq 0 ] 
then
log "Create ipset"
ipset -N gfwlist iphash
ipset -N gfwlist_V6 iphash family inet6
fi
}


Check_iptables()
{
_wc=`iptables -t mangle -L |grep 'Chain fwmark (2 references)'|wc -l`
 
if [ $_wc -eq 0 ]
then
log "create iptables mangle table rules"
iptables -t mangle -N fwmark
iptables -t mangle -F
iptables -t mangle -A PREROUTING -j fwmark
iptables -t mangle -A OUTPUT -j fwmark
iptables -t mangle -A fwmark -m set --match-set gfwlist dst -j MARK --set-mark 1

#ip6tables -t mangle -N fwmark
#ip6tables -t mangle -F   
#ip6tables -t mangle -A fwmark -m set --match-set gfwlist_V6 dst -j MARK --set-mark 1

fi
}

Check_ip_rule()
{

_wc=`ip rule |grep 'fwmark 0x1'|wc -l`
                       
if [ $_wc -eq 0 ]      
then       
log "Create ip rule forward rule"            
ip rule add prio 100 fwmark 1 table 100
#ip -6 rule add prio 100 fwmark 1 table 100
fi 



_wc=`ip route show table 100 |wc -l`

if [ $_wc -eq 0 ]
then
log "Create ip route rule"
#ip route add table 100 default dev tun0
ip route add default via 192.168.8.1 table 100
#ip route add table 100 via 192.168.8.1 dev tun0
#ip -6 route add default via 2001:470:66:2e8::1 table 100
fi
}

Check_MASQUERADE()
{
_wc=`iptables -t nat -nvL |grep MASQUERADE |grep 192.168.1.0 |wc -l`

if [ $_wc -eq 0 ]
then
log "Create nat rule"
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
fi
}





################Start execution#############

# Add_Crontab

# Check_vlm_PROC
#Check_internet
Check_timeout
#Check_KCPTUN
Check_VPN_PROC
Check_VPN_Conn
Check_timeout
Check_Dnsmasq
Check_dns_route
Check_ipset
Check_iptables
Check_ip_rule
Check_MASQUERADE

执行完脚本,然后设备的网关和dns指向服务器地址即可。

Confluence 使用tar.gz手工更新版本

突然收到一个阿里云的短信,提示服务器上有异常,登录一看,又是confluence用户有执行可疑shell命令,没得讲,肯定又是confluence出新漏洞了,赶紧上线把服务停掉,然后登录官网一看,果然发布了新版本,更新几个高危的安全漏洞。

用常规的bin文件更新居然不行,没辙,只要用tar.gz 手工更新。

把原来/opt目录下的confluence改名为confluence.bak,并且把/var下的数据文件备份。然后将新下载的安装包解压到原来相同路径下。

confluence.bak/confluence/WEB-INF/classes/* 所有文件需要复制到新文件夹同路径下。

/opt/atlassian/confluence.bak/bin 所有文件需要复制到新文件夹同路径下。

/opt/atlassian/confluence.bak/conf 所有文件需要复制到新文件夹同路径下。

删除原有数据文件的索引,待新版本启用后重建索引

/var/atlassian/application-data/confluence/journal

/var/atlassian/application-data/confluence/index

否则会报错:

confluence constructor threw exception; nested exception is java.lang.numberformatexception: for input string: “4a.locked

使用原有命令启动服务即可,如果到了新服务器设立的页面,也不用惊慌,把备份的confluence.cfg.xml恢复到原路径即可。

/var/atlassian/application-data/confluence/confluence.cfg.xml

无线网络支持不通用户组使用不同SSID

背景:

公司中网络按照网络角色划分了不通的访问权限,不同的用户组处在不同的网段,无线网络同样按照网段划分了不同的SSID,要求不同用户组只能接入授予权限的SSID。

大致的网络规划如下:

用户组网段VLANSSIDAD组
研发172.22.3.0/2422yqb-devwifi-dev
内部用户172.22.10.0/2433yqb-corpwifi-corp
访客172.22.22.0/2444yqb-guest

公司采用Window Server 2016 Active Directory来管理所有用户及用户组。

首先需要通过在服务器上安装NPS(网络策略服务器)作为RADIUS服务器以供无线网络作用用户认证使用。

打开网络策略服务器管理界面

新增连接请求策略



输入策略名称
点击添加按钮
选择NAS端口类型
选择无线-IEEE802.11
一路下一步直接完成即可

新增网络策略

输入策略名称
条件中参考上图。
用户组选择本Wi-Fi 所使用的用户组
被叫战ID输入无线网络名称,以$结尾(正则表达匹配,表示以yqb-corp结尾)。
授予网络访问权限
EAP类型添加PEAP
RADIUS标准属性中删除原有的两项
然后添加两项,如图所示。

新建RADIUS客户端,将无线控制器所在IP加入。共享机密需要记号,无线控制器配置时候需要用到。

无线控制器设置

新建RAdius服务器
新建ISP认证域,记住域名,后续无线网络配置中需要用。

新增无线网络,设置相应的vlan,以及安全模式选802.1X认证,域名选择刚才新建的ISP域即可。注意SSID要和NPS网络策略中的被叫站ID相匹配。

如何设计一个系统来实施OKR

OKR(Objectives and key results),正如德州扑克一样,规则很简单,但是做好却很难。

要引入OKR,那我们希望OKR来帮我们解决什么样的问题?

  • 保持公司战略/目标 与执行层面的一致
  • 浮现团队的主要优先工作及目标并保持专注
  • 部门间横向的一致性及协同
  • 公开提高透明度,高频度的反馈降低执行中的“意外”
  • 满足人的天性:好奇心,归属感,成就感

尝试过就知道OKR要真正落地用起来,用excel,word,wiki都很难满足OKR全生命周期的的管理及使用需求。那么如果设计一个系统来支持OKR的实施,那会是一个什么样的系统?它要支持什么样的功能?

  • 如何支持从创建,执行,评估及总结回顾的全过程
  • 如何同时支持自上而下,和自下而上的创建
  • 如何支持横向的团队协作及依赖,并将依赖显性化
  • 如何支持OKR执行中的每周状态更新及每周进度报告汇总
  • 如何及时反馈、暴露执行中的风险信息传递到相应的人并加以解决
  • 如何支持OKR在任意时刻的新建,更新,终止以反映实际运作的情况
  • 如何在系统层面达到借鉴业界最佳实践而又不过多限制
  • 如何实现OKR的可视化地图,让团队看到不同层级之间的OKR的联系
  • 如何从其他系统自动导入关键结果而不用手工输入
  • 如何将当前时间周期未完成但又有继续实施价值的OKR移入下一周期

花了不少时间整理需求,研读相关的文献书籍,很高兴看到我们的系统就要上线啦。

OKR适合敏捷开发团队么?

先说结论,适合。而且OKR是敏捷的强有力的有益补充

听朋友说他参加一个敏捷Scrum培训,培训讲师提到说敏捷团队不适合搞OKR,听着有点震惊,OKR为什么会和敏捷相矛盾,相冲突呢?

我眼里的敏捷,不在乎形式,你是Scrum,Lean,XP,Kanban还是四不像其实都不重要,只要是符合敏捷宣言和敏捷软件的12条原则的,就是一个敏捷团队。我不认为有任何矛盾之处

敏捷软件开发宣言

我们一直在实践中探寻更好的软件开发方法,
身体力行的同时也帮助他人。由此我们建立了如下价值观:

个体和互动 高于 流程和工具
工作的软件 高于 详尽的文档
客户合作 高于 合同谈判
响应变化 高于 遵循计划

也就是说,尽管右项有其价值,
我们更重视左项的价值。

敏捷开发中最经常遇到的问题就是优先级如何管理,团队的目标如何设立,短期目标和长期目标如何平衡,跨团队如何协作。而这正是OKR的所擅长的地方,让团队保持专注、团队的输出价值与组织目标保持对齐、有野心的目标、可量化的结果、发挥一线员工的才智及能动性、强调沟通协作与透明。这些就算是没有OKR也是一个优秀敏捷团队所必须解决的问题。

要证实其实也很简单,采用敏捷的几个标杆公司的现在都在用OKR,Google不用说了,Spotify、Google,Salesforce、Microsoft、Adobe、Twitter、Splunk、LinkedIn等等也都在OKR的阵营。