关于VPN的一些知识点

  1. openvpn有两种模式:
    1. 一种是网桥模式,
    2. 一种是路由模式
  2. 在计算机网络中,TUN与TAP是操作系统内核中的虚拟网络设备。不同于普通靠硬件网路板卡实现的设备,这些虚拟的网络设备全部用软件实现,并向运行于操作系统上的软件提供与硬件的网络设备完全相同的功能。

    操作系统通过TUN/TAP设备向绑定该设备的用户空间的程序发送数据,反之,用户空间的程序也可以像操作硬件网络设备那样,通过TUN/TAP设备发送数据。在后种情况下,TUN/TAP设备向操作系统的网络栈投递(或“注入”)数据包,从而模拟从外部接受数据的过程。

    openvpn提供两种类型的虚拟网络接口:TUN和TAP,tun用于建立IP隧道,tap用于建立以太网桥,这两种模式我们也称为路由模式和网桥模式。 TAP 等同于一个以太网设备,它操作第二层数据包如以太网数据帧。TUN模拟了网络层设备,操作第三层数据包比如IP数据封包。

    桥接是在一个子网上面创建一个虚拟的,广域的以太网技术,他相当于连通不同局域网之间的桥梁,桥接的优点是广播可以穿透vpn,允许依赖局域网广播的软件运行,桥接无需配置路由,可以和以太网上的任何协议工作,但是桥接的效率比路由模式要低,而且不容易扩展,使用桥接方式连接远端网络时,客户端被分配一个远端物理以太网的IP地址,从而能够和远端子网的其他机器进行通信,就像是连接在本地一样,

    路由的优点是效率高可扩展,可以更好的调节MTU,路由模式的缺点是广播不能穿越vpn,仅支持ipv4,如果使用桥接模式,C/S两端都必须是tap,如果使用路由模式,C/S两端可以是tun也可以是tap,但是两端必须一致

  3. openvpn默认1小时重新验证一次身份,对于双因素验证的情况而言,秘钥是一次性的,重新验证必然失败,于是就会出现经典的每小时断开一次的问题,解决办法:
    1. server.conf 中配置:
  4. 参考资料:
    1. http://my.oschina.net/guol/blog/39924
    2. http://blog.ihipop.info/2011/05/2393.html
    3. https://openvpn.net/index.php/open-source/documentation/manuals/69-openvpn-21.html

puppet入门实践

版本选择

本来是要选择一个最新版本(当时最新版本是4.3),怎奈官方的yum仓库(https://yum.puppetlabs.com/)中没有最新版本;至少看起来没有4.3;有的是:

https://yum.puppetlabs.com/el/6.5/products/x86_64/

 

https://yum.puppetlabs.com/el/6.5/PC1/x86_64/

 

那么,该如何下载呢?

这里解释一下:

puppet 4之前(目前最新版本3.8)是打包在第一个地址下的,放在products目录;

puppet4是一个大的版本更新(目前是4.3)是打包在PC1那个目录下的,什么叫PC1? 即: Puppet Collection    参考: http://docs.puppetlabs.com/guides/puppetlabs_package_repositories.html

 

puppet rpm包说明

puppet4之前:

puppet-  不包含facter、ruby等,这些都是单独的rpm包

puppet-server-  包含一些puppet master需要的一些配置文件(及目录),如下:

puppet-dashboard: 是一个web管理页面

——

puppet4之后:

原来的puppet就变成了puppet-agent了,而且包含facter、ruby、mcollective等rpm包,就是所谓的(All in one)

puppetserver- 和原来的puppet-server不是一个东西,现在的puppetserver 是puppet master的替代品,并且以HTTP REST的方式提供提供服务,java实现的,默认需要内存大小2g,可以在 /etc/sysconfig/puppetserver 中修改

 

安装

  1. 下载对应目录下的 puppetlabs-release-* 的最新版本的rpm,然后rpm -ivh puppetlabs-release-* ,这样就把对应的yum源给安装上了
  2. yum search puppet  可以看到一些puppet的包
  3. 对于puppet4之前
    1. server端:
      1. yum install -y puppet facter puppet-server
    2. client端:
      1. yum install -y puppet facter
  4. 对于puppet4之后
    1. server端(原来的 puppet master虽然4.3中还保留着,但已经不建议使用,提示使用puppetserver)
      1. yum install -y puppetserver
    2. client端
      1. yum install -y puppet-agent

配置

使用

  1. puppet4之前
    1. master
      1. puppet master –no-daemonize   (前台运行,方便调试)
      2. puppet master     (生产上,后台运行)
    2. client
      1. puppet agent –test –server 10.10.10.10    (测试一下)
  2. puppet4之后
    1. master
      1. service puppetserver start
    2. client
      1. ???

批量执行命令

  1. 通过mcollective实现, mcollective 以前需要单独安装,现在已经包含在puppet-agent里面了;不过依赖的activemq需要单独安装: yum install -y activemq

ldap认证逻辑修改笔记

缘起

现在都流行动态码认证了,ldap这个认证领域的老大还是静态密码认证,显得有些过时了,这里试图修改认证部分逻辑已支持动态密码验证。

 

相关代码: servers/slapd/bind.c

编译:

  1. CFLAGS=”-g” ./configure
    openldap依赖bdb,可以用yum安装: yum install -y db4
  2. ./make depend && make
  3. make install STRIP=”

注意: make install时默认是会去掉符号信息的;添加 STRIP=” 选项就不会去掉了(可能你也不需要make install)

开始gdb:

用户名:op->o_req_dn

密码在这里: op->o_request->oq_bind->rb_cred:

下一步就是要把密码修改,其中一部分拿到别的地方做动态密码验证,剩余部分继续给ldap来验证

 

ldap 验证逻辑:

火车运煤算法

转自:http://flychao88.iteye.com/blog/2187854

你是山西的一个煤老板,你在矿区开采了有3000吨煤需要运送到市场上去卖,从你的矿区到市场有1000公里,你手里有一列烧煤的火车,这个火车最多只能装1000吨煤,且其能耗比较大――每一公里需要耗一吨煤。请问,作为一个懂编程的煤老板的你,你会怎么运送才能运最多的煤到集市?

 

这道题一开始看上去好像是无解的,因为你的火车每一公里就要消耗一吨煤,而到目的地有1000公里,而火车最多只能装1000吨媒。如果你的火车可以全部装下,到目的地也会被全部烧光,一丁点也不剩。所以,很多人的第一反应都是觉得这个不太可能。

 

思考答题是

  1. 装1000吨煤,走250公里,扔下500吨煤,回矿山。
  2. 装1000吨煤,走到250公里处,拿起250吨煤继续向前到500公里处,扔下500吨煤,回矿山。此时火车上还有250吨,再加上在250公里处还有250吨煤,所以,火车是可以回矿山的。
  3. 装上最后1000吨煤,走到500公里处,装上那里的500吨煤,然后一直走到目的。

golang debugger 之 delve

Delve is a debugger for the Go programming language. The goal of the project is to provide a simple, full featured debugging tool for Go. Delve should be easy to invoke and easy to use. Chances are if you’re using a debugger, most likely things aren’t going your way. With that in mind, Delve should stay out of your way as much as possible.

地址: https://github.com/derekparker/delve

json日志分析工具: jq

上篇文章介绍了jsawk,由于一些不足,这里又发现了一个更好的工具: jq

安装:

用法:

体验一下:

 

项目主页: https://stedolan.github.io/jq/

指南: https://stedolan.github.io/jq/tutorial/

手册: https://stedolan.github.io/jq/manual/

 

字符串连接

(注意: 这里连接的是字符串,数字是不能直接当做字符串进行连接的)

类型转换:

这里通过圆括号来单独处理一部分,然后通过tostring将输出内容转换为字符串; 也可以通过 @text 实现:

join:

 

获取对象的key:

等效于

等效于:

 

过滤:(通过select 过滤出Name为default的条目,然后只显示名字和ID列)

错误的写法: (下面这个写法把Name和ID排列组合输出了)

如:

 

根据path 和 select获取感兴趣的值:

参考: https://stackoverflow.com/questions/25780807/can-i-use-a-relative-path-or-a-wildcard-in-jq

 

关联数组的key需要使用双引号,不能使用单引号:

 

修改部分值

 

在任何一个级别中查找指定字段:

 

 

构造新对象:

 

关于paths的用法: 1.3 版本中还没有paths:

这里的paths放在圆括号内,不影响输出,就好比bash中的圆括号是在单独子进程中执行一样,不影响当前的环境,同时,使用as使得圆括号的输出保存在变量中,不影响后续的输入; 这样,使得getpath所在环境中的 dot 依然是原始的输入

 

 

参考资料: https://linuxtoy.org/archives/jq.html

Extract keys using JQ

 

https://github.com/stedolan/jq/issues/885

在线测试: https://jqplay.org/jq?

注意事项:

  1. 字符串只能使用双引号,不能使用单引号
  2. if 语句必须有else, 如果其中一个分支实在没啥说的就 select(false) 相当于empty

jsawk

主页: https://github.com/micha/jsawk

用途:一直以来,日志都采用 | 分隔的多个匿名的字段组成的,每个字段代表什么含义是基于位置确定的,应该说是很不用户友好的,对于不太熟悉系统的新手是不太愿意看这样的日志的,所以,如果把日志记录成json格式的,应该说是一个进步;但是,对于经常使用awk分析基于|分隔的日志的我们来讲,awk分析json似乎就太不方便了,那么,jsawk就是我们需要的分析json的awk级别的工具

体验一下:

感受:直接把一个有很多行json的日志文件直接cat给jsawk是不行的,jsawk每次只解析一个json对象(或一个包含很多json对象的数组);如果要聚合一些信息的话,还需要输出给另一个程序(awk?)进一步处理

要不改造一下jsawk?

stat荟萃

awstats

Advanced Web Statistics

ethstatus

Console-based ethernet statistics monitor

gitstats

Generates statistics based on GIT repository activity

iptstate

A top-like display of IP Tables state table entries

iostat

Report Central Processing Unit (CPU) statistics and input/output statistics for
devices, partitions and network filesystems (NFS)

netstat

netstat – Print network connections, routing tables, interface statistics, masquerade connec-
tions, and multicast membership

netstat-nat

A tool that displays NAT connections

ifstatus

Command line real time interface graphs using ncurses

pipestat

Watches data flowing over an anonymous pipe

vnstat

Console-based network traffic monitor

smemstat

Shared memory usage monitoring tool

sysstat

The sar and iostat system monitoring commands

statsd

A simple, lightweight network daemon to collect metrics over UDP

tcpstat

tcpstat reports certain network interface statistics much like vmstat does for system statistics. tcpstat gets its information by either monitoring a specific interface, or by reading previously saved tcpdump data from a file.

 

参考:

http://www.frenchfries.net/paul/tcpstat/