迁移VPS L2TP VPN至Docker容器 —— Docker初上手

趁着学习IBM Cloud Private课程的机会,深入学习了一下Docker的架构和应用方式。感觉这玩意儿真是好啊,应用间隔离加上开源社区贡献各种images,完全不需要重复造轮子,要用的服务直接pull就可以了。于是打算demo一下,把VPS上的L2TP VPN服务迁移到Docker上。

现有VPS上的L2TP IPSec VPN是用xl2tpd和openswan搭建起来的,整体稳定,但经常出一些莫名其妙的连接问题,也许和伟大的墙有关。我也不能隔三岔五换IP,就当个佛系用户了。

首先要删除VPS 环境中的VPN相关包

#yum remove xl2tpd openswan

操作完成后查看udp端口500 和 4500未被占用即可

#ss -annp

接下来安装Docker。

参考官网,在vps上安装CE版本

https://docs.docker.com/install/linux/docker-ce/centos/

#yum install -y yum-utils device-mapper-persistent-data lvm2

#yum-config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo

#yum install docker-ce

#systemctl start docker

Docker启动后,pull VPN服务。去https://hub.docker.com搜索images,发现排名第一的L2TP image是fcojean/l2tp-ipsec-vpn-server,就锁定它了。

#docker pull fcojean/l2tp-ipsec-vpn-server

按照格式要求输入参数,保存成配置文件。

#vim vpn.env

VPN_IPSEC_PSK=输入私钥
VPN_USER_CREDENTIAL_LIST=[{“login”:”用户1″,”password”:”密码1″},{“login”:”用户2″,”password”:”密码2″}]
VPN_NETWORK_INTERFACE=网卡名

提前检查IPSEC Kernel mod是否开启

# modprobe af_key

然后开启vpn服务

docker run \
–name l2tp-ipsec-vpn-server \
–env-file ./vpn.env \
-p 500:500/udp \
-p 4500:4500/udp \
-v /lib/modules:/lib/modules:ro \
-d –privileged \
fcojean/l2tp-ipsec-vpn-server

执行成功后,docker返回container编号

aa605459103f25c8bd29734e27be267da371c219f1e244fdb24c90c2a9ba7e9e

[root@albertknight ~]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
aa605459103f fcojean/l2tp-ipsec-vpn-server “/run.sh” 7 seconds ago Up 7 seconds 0.0.0.0:500->500/udp, 0.0.0.0:4500->4500/udp l2tp-ipsec-vpn-server

检查vpn login记录

#docker logs l2tp-ipsec-vpn-server

Trying to auto discover IPs of this server…

================================================

IPsec VPN server is now ready for use!

Connect to your new VPN with these details:

DNS: 8.8.8.8
Server IP: x.x.x.x
IPsec PSK: balabalabala
Users credentials :

Login : test1 Password : test1
Login : test2 Password : test2

Write these down. You’ll need them to connect!

Setup VPN Clients: https://git.io/vpnclients

================================================

Redirecting to: /etc/init.d/ipsec start
Starting pluto IKE daemon for IPsec: Initializing NSS database

.
xl2tpd[1]: setsockopt recvref[30]: Protocol not available
xl2tpd[1]: This binary does not support kernel L2TP.
xl2tpd[1]: xl2tpd version xl2tpd-1.3.6 started on aa605459103f PID:1
xl2tpd[1]: Written by Mark Spencer, Copyright (C) 1998, Adtran, Inc.
xl2tpd[1]: Forked by Scott Balmos and David Stipp, (C) 2001
xl2tpd[1]: Inherited by Jeff McAdams, (C) 2002
xl2tpd[1]: Forked again by Xelerance (www.xelerance.com) (C) 2006
xl2tpd[1]: Listening on IP address 0.0.0.0, port 1701
xl2tpd[1]: Connection established to 172.17.0.1, 50124. Local: 5584, Remote: 6 (ref=0/0). LNS session is ‘default’
xl2tpd[1]: start_pppd: I’m running:
xl2tpd[1]: “/usr/sbin/pppd”
xl2tpd[1]: “passive”
xl2tpd[1]: “nodetach”
xl2tpd[1]: “192.168.42.1:192.168.42.10”
xl2tpd[1]: “refuse-pap”
xl2tpd[1]: “auth”
xl2tpd[1]: “require-chap”
xl2tpd[1]: “name”
xl2tpd[1]: “l2tpd”
xl2tpd[1]: “file”
xl2tpd[1]: “/etc/ppp/options.xl2tpd”
xl2tpd[1]: “/dev/pts/0”
xl2tpd[1]: Call established with 172.17.0.1, Local: 63456, Remote: 25724, Serial: 1
xl2tpd[1]: result_code_avp: result code endianness fix for buggy Apple client. network=768, le=3
xl2tpd[1]: control_finish: Connection closed to 172.17.0.1, serial 1 ()
xl2tpd[1]: Terminating pppd: sending TERM signal to pid 727
xl2tpd[1]: result_code_avp: result code endianness fix for buggy Apple client. network=256, le=1
xl2tpd[1]: control_finish: Connection closed to 172.17.0.1, port 50124 (), Local: 5584, Remote: 6

尝试手机连接,迅速成功,收工!

在EFI Shell下刷新DELL PERC H200 Firmware

从Dell官方固件更新到了LSI的最新版,虽然理论上兼容性和稳定性都更好一些,但是毕竟不是DELL的官方版本,Ctrl+C的配置界面被屏蔽了,毫无办法。于是尝试刷回dell的bios,efi,和firmware.

尝试在windows版本的sas2flash执行-o -e 6参数,失败,提示该平台不支持此操作。估计这种清掉整个flash的操作权限级别太高了,windows这种高运行级别的搞不定。

用PE引导至dos工具箱,执行dos版的sas2flash,直接失败,提示初始化failure,LSI的FAQ还真有解释:这块板子不支持,请换别的板子尝试。

无奈只能尝试用EFI Shell来刷固件了。以前完全没有接触过,找能启动到EFI Shell的文件包就花了不少时间。Intel官网没有能方便地直接下载的连接,非常不人性化。

UEFI会读取启动介质的/EFI/BOOT/BOOTx64.efi文件,如果这个文件是shell,那么就进入命令行,如果是告诉系统加载Windows Boot Manager,那就进入系统启动流程了。

总之,找个支持UEFI的PE,写到U盘,替换EFI目录为自己的shell包。一般包含一个Apps目录来执行一些常用命令。

启动EFI Shell后,发现这货不会自己刷屏。敲一条命令刷到下面就看不见了,真是郁闷。cls命令只会把光标移到屏幕最上面,完全不管清屏的事,真不知道这code是谁维护的。

不过sas2flash.efi是可以执行的

#清空flash仅保留厂商信息
sas2flash.efi -o -e 6

#刷入原厂firmware和bios
sas2flash.efi -o -f dell.fw -b dellbios.rom

由于是盲操,等了大约5分钟,肯定刷完的时间,然后cls,执行sas2flash.efi -list看一下版本变没变过来,没问题重启。

Dell的BIOS设置界面回来了!

参考:

IBM ServeRAID M1015 Part 4: Cross flashing to a LSI9211-8i in IT or IR mode

———————————

后来发现EFI Shell不会刷屏是我机器UEFI的问题,而且华擎的板子自带了一个EFI Shell在启动选项里,都一个德行,不会刷屏。

所以我找到的EFI Shell应该是没有问题的,有需要的可以拿走。

EFI_SHELL64

socat端口转发实现穿透nat

家里的宽带一直分配内网地址,各种ddns长期处于失效状态,苦不堪言。

前一阵QNAP和花生壳合作,免费在NAS上提供了花生棒的服务(花生壳内网版),尝试了一把,真心好使!只可惜,免费用户只能做两条映射,共计1GB流量,而且线路只能选择电信。

最近在搞ESXi的实验,远程用vSphere Client连ESXi两个端口当然不够用,于是打算自己研究一下nat-ddns的实现。

搜了一下原理,其实特别简单。有一台服务器做中转,打通一条路径进行流量转发。我原以为服务器就解析一下地址然后P2P传输,看来不是。因为所有流量都被中转,所以才有了1GB的限制。

于是,核心就是必须有一台公网上的服务器,来做流量中转。这对于有VPS的同学们来说就是现成的资源。端口转发的工具一搜一大把,socat, netcat, rinetd等等…

其实哪一个都能实现功能,不过我这边路由器刷的Tomato系统刚好原生支持socat,因此就用这个命令了,支持ip、tcp、udp、ipv6、ssl….

 

#VPS端
#开启debug级别输出,不写日志直接打在stdout方便看
#vps设置30303端口监听,有请求则转发给30304端口
socat -d -d -d tcp-l:30303,reuseaddr,bind=0.0.0.0,fork tcp-l:30304,bind=0.0.0.0,reuseaddr,retry=10

 

#Router端
#开启debug级别输出
#路由器设置27777端口监听,有请求则转发给内网vm-win7主机的RDP端口
socat -d -d -d -v tcp:vpsname:30304,forever,intervall=5,fork tcp:vm-win7:3389

测试成功,由于vps在美国,远程桌面转发速度没有特别理想,但是基本可用。对于http和ssh这种开销小的,应该是没有问题了。

稍后会放RDP, SSH, HTTP的测试结果。

vSphere Client需要连接ESXi的443端口,测试这个没有成功。之前做过netstat检查,连接服务器只需要443,不知道是不是用到了ssl加密,所以还需要在socat上配置ssl。我觉得不应该,我只让它转发流量了,它就不应该管流量里面是什么。今晚再稍微做些测试,也许还有没发现的端口需要一起开启。



	

Windows对528B sector硬盘兼容性测试

由于对NAS的需求越来越多,QNAP-212P已经不能满足扩展的功能需求,开始考虑自己定制NAS软硬件系统。 出于扩展性考虑,首先入了一块磁盘扩展卡。DELL PERC H200,芯片是LSI SAS2008,刷成了LSI 9211-8i的firmware,由于前期测试暂时不用RAID,因此刷了IT模式的固件,当做HBA来使用。 测试了多块服务器换下来的硬盘,7.2K SATA,10K SAS,15K SAS,兼容性普遍很好,识别与操作都没有问题。 不过当我测试一块服务器的SAS SSD的时候,发现了问题。

系统可以识别到磁盘,并且提示进行初始化。但是不管选择GPT还是MBR,确认后都会受到I/O请求失败的报错。经过测试,各种软件均不能正常对该磁盘进行操作。换成Linux,fdisk也仅仅是能识别到名字(Ubuntu),但是不能完整识别所有信息,也不能格式化。

检查了一下,发现这块盘是528B sector,属于一种专有格式。但是普通磁盘都是512B的sector,怀疑是操作系统对该格式磁盘不兼容造成的。插回服务器重新格式化成512B sector,windows识别正常,使用也很顺利。

性能: 读取稳定在450M/s,写稳定在400M/s

 

安装CentOS7后恢复Windows引导项

以前装Linux系统引导工具还是Grub,安装完Linux会自动识别机器里的Win分区,自动添加引导。

这两天在物理机上尝试装CentOS7,发现它用的是Grub2,没有自动替我把引导项识别出来。

根据官网的tip,使用下列命令重新扫描引导。

#grub2-mkconfig -o /boot/grub2/grub.cfg

完工,重启即可

使用U盘安装新版Ubuntu时引导问题

这两天在部署新的测试机,想在旧笔记本上装几套系统。

很久没有用过U盘给物理机装Ubuntu了,用UltraISO写好U盘之后引导,发现无法进入安装或者live界面,提示:

gfxboot.c32:not a COM32R image    
boot:

尝试了很多命令不得解。后来去ubuntu论坛搜了一下,发现直接敲live就可以进入live界面,然后在live界面通过安装器进行分区和系统部署即可。

有人说是syslinux版本的问题,我看了一下,15.04是syslinux v4

换了一台有UEFI的电脑,无需人为干预顺利进入启动界面。大概是和Legacy BIOS有什么关系吧。

待查。。。

Tomato配置DNSMASQ实现内网自定义DNS解析

最近有需求搭一些web服务做测试,比起写每台机器的hosts表,肯定是在路由器端做解析比较省心。

tomato系统提供方便的配置管理界面,可以快速部署/修改。

高级设置——DHCP/DNS——DNSMASQ自定义配置

address=/test.test/172.21.21.3
address=/qnap.nas/172.21.21.10

address关键字可以支持泛解析*.domain.com,server关键字直接定义主机。

自定义结束后不要忘记勾选“截获DNS端口(UDP 53)”,这样才能让路由器下面的局域网生效。我就忘记勾选,结果只能让路由器自己解析成功,其他设备都失效。

腾讯企业邮箱免费版托管域名邮箱

Google和Microsoft相继停止了域名邮箱托管的免费服务,不禁后悔当年没有申请备用。

最近有需求要使用自定义域名邮箱,在VPS上尝试搭了一下,结果不怎么理想,改为寻找仍然存在的免费托管服务。国外的没有太多消息,国内几家老牌免费邮箱都有企业邮箱服务,不过需要提交过多证明材料(身份证,备案…)。找来找去还是腾讯比较靠谱,企业邮箱提供对小站长的免费版本,注册什么资料都不需要,一气呵成。

首先到这个地址注册

https://cnc.exmail.qq.com/signupfree#signup/free

需要填个管理用的个人邮箱,注册完就可以配置了。

管理功能非常强大,企业邮箱的基本功能都是有的,除了web界面外还提供POP3和IMAP客户端的支持。

在添加若干邮件地址后,可以指定其中一个为管理员,登陆该账号直接可以进行管理操作;还可以对不同分组指定管理员分配权限,十分灵活。

基本配置完成后,还要对DNS解析进行修改,添加MX解析记录

腾讯企业邮箱要求设置的MX记录如下:
邮件服务器名:mxbiz1.qq.com 优先级:5
邮件服务器名:mxbiz2.qq.com 优先级:10

最好再添加一个mail.domain.com的A记录,这样使用mail.domain.com可以直接进行邮箱登陆操作了,否则需要进入https://exmail.qq.com输入完整的邮箱地址和密码登陆。

最后,本博客的联系邮箱切换为contact#albertknight.com,欢迎骚扰。

部署shadowsocks替代ssh作为代理工具

 

shadowsocks
shadowsocks

最近我们某个伟大的长城再一次升级,开始有针对性地干扰ssh流量转发代理功能。

具体表现为,ssh连接间歇性断开,发生频率不一定,并且有一定几率短时间内无法再次连接。据说,升级后的wall可以通过流量模型判断服务器ssh连接是普通操作还是流量代理,且不说准确率有多大,光是这种方式就可以让一大片各种协议的代理工具中枪了——只要它们还基于TCP.  攻击方式依然是发伪造握手包reset连接。

虽然对于个人使用的影响比较小,不过真的中招了也比较闹心。流量模型我们暂且防不住,ssh倒是可以直接换掉。shadowsocks大名鼎鼎,据说速度还比ssh快一些,就决定是你了!

继续阅读“部署shadowsocks替代ssh作为代理工具”

重拾Linux

历经一年半AIX的洗礼,从安装使用到问题诊断,Unix算是上手了。

不过Linux却被遗忘在了角落里,忘得七七八八了。

AWS VPS,Tomato路由器,这就是我上班后接触到Linux的全部。好在有这两样,也算没把常用命令忘光。

Linux大势所趋,我却反其道而行之跑去玩上了Unix,实数逆天之行为。

在充分的反省后,迫于公司转型压力(这才是重点!),我觉得还是要把Linux捡一捡,好好学习点东西,做些记录。

上学的时候一直在用Ubuntu,的确是个好系统,APT包管理器也相当好用。不过如今企业级Linux被Redhat和SUSE霸占着市场,顺应潮流也要接触这些系统。差别应该不是很大,适应一下也就好了。

祝我好运吧!