Golang中exec.Command执行系统命令后Stderr错误重定向的详细研究

天锦 发表于 码农也得有格调 分类,标签:
经常用Golang中的exec.Command去调用系统命令,像这样:func main() {    cmd := exec.Command("showmount", "-e", "192.168.1.5")    result, err := cmd.Output()    if err != nil {        fmt.Println(err.Error()) &n...

ipip, sit, ip6tnl, vti, gre, gretap等常见隧道区别总结

天锦 发表于 码农也得有格调 分类,标签:
Linux已经支持多种类型的隧道,但是新用户可能会对它们的差异感到困惑,不确定哪一种最适合给定的环境。比如我在使用gre隧道时就搞不明白,都是gre隧道,为什么gre类型的不能把接口加到bridge里面,而必须要使用gretap。所以在这里做个总结。列数一下这些隧道协议的不同区别。此外,还可以iproute2命令获得隧道接口列表以及特定隧道配置的帮助ip link help本片文章将包含以下常用隧道IPIPSITip6tnlVTI和VTI6GRE和GRETAPIP6GRE和IP6GRETAPFOUGUEGENEVEERSPAN和IP6ERSPANIPIP隧道与字面意思一样,就是一个IPoverIP的隧道,在RFC2003中定义了的,他的头信息是这样的:它通常用于通过公共IPv4互联网连接两个内部IPv4子网。它的开销最低,但只能传输IPv4单播流量。这意味着...

Linux Shell脚本的具名传参

天锦 发表于 码农也得有格调 分类,标签:
在linuxshell中编写的脚本,在需要传参的时候,通常是在脚本后面用空格隔开各个参数,从而实现把参数传到脚本里面:[root@public~]#bashmyscript.shparam1 param2 param3在脚本中通过$1、$2、$3这样一个美元符号加数字获取参数#!/bin/bashecho "param1 is $param1"echo "param2 is $param2"echo "param3 is $param3"可以看出,这种传参方式是强顺序相关的,当需要的参数多了之后,使用体验就会变的很糟糕。可以使用getopts进行具名获取#!/bin/bashwhile ge...

记一次NFS故障

天锦 发表于 码农也得有格调 分类,标签:
因编译某个远古时期的系统,需要用旧版的gcc,为此安装了Ubuntu14.04作为开发环境,资料都在一台CentOS7的服务器中存储,用NFS协议为其他主机提供文件服务,都挂载正常,唯独Ubuntu14.04这台新建的虚拟机无法挂载,报错:mount.nfs:accessdeniedbyserverwhilemounting10.1.1.5:/nfs/4TB解决方法是加上参数vers=3可以解决sudomount-tnfs10.1.1.5:/nfs/4TBnfs/-overs=3原因是Ubuntu14.04默认使用NFS版本过老,与服务器协商不了,指定使用版本3即可...

Go语言(GIN)搭建DDNS服务器

天锦 发表于 码农也得有格调 分类,标签:
最近由于异地组网的事情,节点都是动态的IP,在使用阿里云的API做DDNS时,由于阿里云的限制,最小的TTL也只能设置到600,IP更新一次就要折腾至少10分钟,期间就会造成长时间的断联,而且我内部的Kubernetes等系统又要使用基于nsupdate(RFC2136中的动态更新功能)来更新记录,所以自建一个标准的基于RFC2136定义的DDNS系统迫在眉睫!此外还要提供一个HTTP接口用以路由器设备使用curl来更新IP。总体架构首先使用bind服务作为DNS服务器,配置成允许使用nsupdate工具动态更新,完成兼容RFC2136协议的DDNS系统,然后再使用web语言来实现这个http接口。再网上搜集资料经常看到的都是基于php的,但是如果使用php的话就要使用exec或者system这种高风险的函数来调用nsupdate,一般为了安全起见,管理员通常是将这些函数都是禁用掉的...

[后续] OpenWRT系统中ocserv不支持使用Radius指定客户端IP的解决方法

天锦 发表于 码农也得有格调 分类,标签:
在上次组网完成之后,OpenWRT系统下ocserv不支持Radius认证的问题遗留了下来,后来也一直挂在心上,在一次看OpenWRT软件包源码的时候发现了端倪,问题很简单,OpenWRT为了尽量减小软件包的体积,把不常用的功能都没有进行编译,也就是ocserv的Makefile中默认的radius支持是没有启用的:# ocserv avanced configurationmenu "Configuration"depends on PACKAGE_ocservconfig OCSERV_PAMbool "enable PAM"default nconfig OCSERV_SECCOMPbool &qu...

OSPF动态路由协议错误排查

天锦 发表于 码农也得有格调 分类,标签:
最近因为异地组网的事情没少折腾OSPF这个IGP内部路由协议,遇到了一些问题,在这儿记录以下。两端没有任何邻居信息用doshowipospfinterface命令看一下接口有没有up,接口有没有enableOSPF协议,没有enable的话查看你的network声明,确认有没有正确声明网络,写错IP地址这种错误很虽然很低级但很常见也最容易被忽略!检查防火墙,看有没有被防火墙拦截掉GRE的数据包。一端卡在Init,另一端无信息同样,检查防火墙和network声明。对于OpenConnect的链路,目前我也不知道啥情况。卡在Exstart检查接口的MTU是否正确,两端MTU是否相同。当两端MTU值不同时,OSPF协议默认就不进行下一步的路由信息交换了,也就卡在了Exstart中。不合适的MTU会造成网络的效率低下,虽然可以使用mtu-ignore忽略这个问题,强制进行路由交换,但是不...

在OpenWrt上部署OSPF进行异地组网的动态路由生成

天锦 发表于 码农也得有格调 分类,标签:
前言异地组网,各站点下都有不止一个的IP段,规模越来越大,遂即尝试从静态路由迁移到OSPF协议上。使用RouterOS模拟OSPF组网时,鼠标咔嗒咔哒点两下就组网成功了,奈何我的设备都是OpenWRT的系统,实现起来可没模拟那么简单,或者说没有在OSPF上那么简单。可以用坎坷来形容了。全网搜索OpenWRT跑OSPF协议的资料,只有寥寥几篇如蜻蜓点水一般的文章,获得到了一个有用信息,那就是有一个软件叫Quagga,它是一个路由软件套装包,包含了vtysh为用户提供配置操作的接口,zebra进程与内核进行通信,实现路由条目在内核中的添加和修改,以及ospfd、bgpd等多种路由协议的守护进程,完成实际的路由协议的学习和信息交换。quagga通过这种模块化的方式实现了多种路由协议的集成。所以,那还能咋的,安呗,除了它没别的了。部署OSPF路由协议[root@OpenWrt-A ~]#...

ocserv指定分配给客户端的IP地址与反向添加路由

天锦 发表于 码农也得有格调 分类,标签: OpenWRTVPNOpenConnectOcserv
遇到的问题有一个异地组网的需求,也就是说需要搭建VPN进行异地组网,常见的PPTP和L2TP由于某些特殊原因,不得不抛弃不用,重新选择新的协议,思科的AnyConnect基于SSL加密,可以自定义通信的端口号,是个不错的选择,部署了兼容的开源方案ocserv作为服务器,用了一段时间,感觉也很稳定。但是ocserv默认的plan密码只能设置用户名和密码,客户端的IP地址池在ocserv.conf中定义,不能像L2TP和PPTP这些基于PPP拨号获取IP的协议一样指定客户端获取的IP地址,客户端获取的IP地址是随机的,这样一来对于终端用户远程访问很方便,但是对于多站异地组网就很麻烦了,给反向添加路由条目带来了很大的麻烦。假定有两个站点A(10.1.1.1/24)和B(10.2.2.1/24),A作为VPN服务器,VPN接口网络为192.168.240.1/24,当使用L2TP等基于PPP拨号的...

AIX系统安装yum包管理器,使用bash替换ksh

天锦 发表于 码农也得有格调 分类,标签:
安装yum虽然AIX系统支持安装rpm格式的软件包,比使用smit安装软件方便一些,软件库也多一些,但是当你安装一个包依赖多个包时,挨个下载依赖包,挨个安装就过于麻烦。最好还是部署一个yum包管理器来管理软件安装方便一些。可以到https://www.ibm.com/support/pages/aix-toolbox-linux-applications-downloads-alpha 下载yum的rpm包和其相关依赖来安装yum,不错的是IBM提供了一个脚本实现了一键安装yum。该脚本下载地址http://ftp.software.ibm.com/aix/freeSoftware/aixtoolbox/ezinstall/ppc/yum.sh ,下载之后可以通过ftp上传到aix系统中,添加执行权限后执行安装就可以了。#chmod +x yum....