分类目录归档:网络

对各种网络问题的研究

AWS:穷人不要用

前几天我在AWS的竞价请求莫名出问题了,我设定的价格是0.02每小时,在我查询当前价格的时候看到的也是0.003没小时,但是AWS却告诉我说价格超出设定值,实例被暂停了。然后我重新提交了一个一模一样的申请,结果却能顺利运行。

我提交了工单,但是3天没人理,优先级是低,这是我见过最糟糕的支持工单了。

想想前几个月忘记了AWS的流量政策结果在上面跑了个吃流量的货结果导致当月消费178刀,简直酸爽的难以置信。

得出来的结论就是,AWS这东西,穷人玩不起。

然后我又滚出AWS,跑到vultr去了。结果又丢了几篇文章。

windows上的log服务器

这2天想着,家里设备都已经一大堆了,想想看能不能有个统一的管理,反正那台小主机闲着也是闲着,就用来挂下载似乎有点浪费,而且也没那么多东西可以下。

暂时来看,可以玩的有2个,一个是syslog,还有一个是snmp。

先从syslog下手。虽然Google得来的结果把我指向了一个叫做PRTG的这么一个东西,这个其实是个network monitor,跟syslog什么的没什么关系,这个晚点再写文章。

先是找到一个叫做splunk的东西,看起来超专业的,于是很明显我不会用,结果研究了一阵子之后,卸载了。

后来找到一个叫做syslog watcher的,界面简洁(lou)明了,很符合目前所需的要求,而且体积也小很多,于是果断一试。

惯例先上参考:

http://www.howtogeek.com/107069/how-to-remotely-collect-server-events-using-syslog/

https://aacable.wordpress.com/2011/11/29/howto-save-mikrotik-logs-to-remote-syslog-server/(GFWed注意)

安装过程很简单,直接同意并确认“我没看过这么一大串英文”之后安装好运行,然后点击左上角的那个collect,然后服务器端就配置完成,简单的简直丧心病狂。

syslog watcher

然后就是客户端的配置:

————————————DD-WRT————————————-

找到“服务”,然后在服务的页面找到syslogd的设定位置,启用并填上远端服务器的地址,然后保存,应用设置。搞定。

syslog1

————————————-OpenWRT————————————

openwrt也一样简单,系统-系统-日志,填上远程服务器的ip就ok。

syslog-openwrt保存并应用之后,在syslog服务器上暂时不会看到有输出,因为luci不会自动重启log服务,手动/etc/init.d/log restart或者通过luci来重启那个叫做“log”的服务就可以了。

——————————–RouterOS————————————————–

家里用着一只RouterBoard作为骨干路由,当然是少不了RouterOS,RouterOS的设定比另外2个繁琐一点,不过设定上也细致一点,算是各有个好啦。

browse.php找到system-logging,然后从窗口里找到actions页,双击remote来修改设定。

填上log服务器ip,勾上“BSD syslog”,syslog facility选择“local0”,ok确认设定后,切换回“rules”页面,然后将你想要的那些topics要送去remote。

于是所有的log都能在syslog watcher那里看到了。

新玩具到手,Buffalo WZR-1750DHP

突然发现很久都没折腾过路由了,手上一直上个世代的WZR-HP-AG300H一直服役的很好,有线千兆和150Mbps+300Mbps无线的组合基本上非常够用,文件服务已经转交到一只迷你主机上(给这货上了Windows再加个显示器结果变成了主力机器真是感觉伤不起)。而且这只AG300H还创造过uptime200+日的记录然后被一次停电终结了。

最近开始瞄中这个WZR-1750DHP,128MB的Flash+512MB的RAM+800Mhz的ARM双核感觉堪比那只闲置的RaspberryPi B,但是看到淘宝最低的报价都超过500还是让我一阵犹豫。结果没过多久就看到有家报价报380(当然是二手货),比我3年前入手AG300H(当然还是二手货)的时候还要便宜20,果断入手了。

到手之后发现店主很好心地帮忙把机器固件升到了最新的2.27,这是个非常坑爹的固件,我尝试使用网页刷DD-WRT的时候,告诉我,不能刷到版本比2.27低的固件。坑爹呢这是,我买回来就是要用第三方固件的啊!拿原厂固件这货有个毛用啊,这配置上傻瓜路由固件简直是天大的浪费啊。

在做了大量的Google之后,发现很多人有相同的问题,也有的人表示我这样照刷没问题啊怎么你刷就有问题呢。还有的说你找Buffalo的技术人员就可以啦,然后又有人说这个不行啦,太多人找他们了,然后他们也表示不能再给我们这样搞。找来找去都并没有找到什么靠谱的解决方案。

error_after_227_612

在一阵子不死心之后,我还是没找到刷固件的方法。然后我就想起了之前对AG300H的hack,TTL接口登陆真是个好东西。于是我开始琢磨怎么打开这货。

大概是这货还是比较新的东西,Google上的资料比较少而且需要仔细甄别,在研究了一个小时之后,我发现了这篇还有这篇,才找到了打开盖子的方法(真是纠结)。

给张正面特写(摘自网络,型号不是1750DHP)Opening-3大概是我手艺不精,反正我是和恩山上的那位大大一样,暴力KO了一堆卡扣才打开了盖子,还有中间CPU粘着的散热片是固定在盖子上了,开的时候慢慢来。

打开了之后,照着这篇TTL登陆到CFE然后强行刷掉了原厂固件之后,DD-WRT就搞起来了。

附上Google来的TTL定义wzr1750dhp_3_serial_929

半路上发生了一个诡异的情况,当我跳好TTL后,上电无法开机,只有在启动之后再插上杜邦线,才能正常使用,这令我百思不得其解,不过还是能用于是就先不管了。

不知是天性使然还是我和DD-WRT八字不合,用起来我表示DD-WRT这管理方式非常不习惯,想刷回Openwrt,但是刷回Openwrt之后看起来RC3还是跟wiki里面的RC2一样没有解决无线的问题。这……尼玛死,我要不要刷回DD呢,我现在非常纠结。

blog重新上线

经历了一段操蛋的时间,让我意识到,老老实实续费域名才是正道。

原来一直用godaddy,大店家,质量真心不错,只是他们家的用户名(不支持email地址登录)和密码我永远记不住,要去找回。

内容没话说,100个dns记录,附赠一个免费的邮箱,也就那样。当时要续费的时候因为没有优惠码,于是想转服务商,看着说明说会很麻烦,结果一个脑抽“不如删掉再注册吧”,结结果悲剧了,忘记有保护期这么一回事,导致我最后丢掉了我的域名。

后来又试了crazydomain.au,结果是个大坑,注册域名需要你上传身份证或者驾照什么的不说,在他那边申请了backorder,结果等了70+天之后发现域名已经被抢注了,我擦,吃干饭的?后来想想,唉,注册个新的吧。就注册了个.info域名。当时还搞特价,1.99刀一年,还乐呵呵的想这么便宜,一下子就注册了5年,还不到10刀,高兴的很啊,以前一年都不止这个价。结果注册完了想改dns记录,就看到一个dns service,旁边有个activate,心想,不了个是吧,点了进去,说要继续收费,卧槽,果断邮件问了客服,得到的答案真是要另外付费。尼玛,我注册来用的不是注册来炒的!要额外加收110+的人民币,要你何用!

最后来到了gandi.net,干净利落,果然no bullshit。而且价格表大大方方的放在了页面底部,相比godaddy,我查了半天都找不到pricing list的链接。

最后注册了个.equipment的域名,有点长,但是听起来挺酷的。gandi.net附赠了不少东西,其中有5个邮件账户和1年免费的安全证书这个不错,其他blog什么的用不上。

另外gandi.net的话用paypal支付时有最低限额的,最低转账14刀,我消费了12刀+结果还是被扣了14刀。剩下的钱会转到他的“预付费账户”里面。

发自 WordPress for Android

pxe启动archlinux的配置字段

参考:http://www.cianmcgovern.com/serving-live-arch-linux-environment-pxe/

另外参照之前关于建立pxe服务器的文章:https://ferrets.space/2014/04/07/%e5%9c%a8%e5%ae%b6%e9%87%8c%e5%81%9a%e4%ba%86%e4%b8%aapxe%e6%9c%8d%e5%8a%a1%e5%99%a8/

其中,pxelinux.cfg/default中关于archlinux启动字段是这样的

LABEL archlinuxlive
menu label Arch Linux Live 64bit
kernel archlinuxlive/arch/boot/x86_64/vmlinuz
append initrd=archlinuxlive/arch/boot/x86_64/archiso.img archisobasedir=arch archiso_nfs_srv=NFS_SERVER_IP:/home/pxeroot/archlinuxlive ip=:::::eth0:dhcp -

不同的linux的append字段都不一样呢

在家里做了个pxe服务器

参考:http://wiki.openwrt.org/doc/howto/tftp.pxe-server

https://wiki.archlinux.org/index.php/NFS_(简体中文)

http://archlinuxarm.org/forum/viewtopic.php?f=31&t=3854

https://wiki.archlinux.org/index.php/Tftpd_server

新到手了只pogoplug,只用来做samba的话感觉稍微有点浪费,偶尔看到了网络启动系统这种东西,于是也想做一个来玩。

材料:一个dhcp服务器,一个tftp服务器,一个nfs服务器。

网上很多教程都是让pxe服务器自己包揽全部工作,这让我不高兴,dhcp这东西就该由openwrt做,文件服务就该让pogo来做,但是网上相关的教程都没有分工的内容,于是看着很多教程,自己研究了一下,终于成功了。

pxe网络拓扑

 

首先,在openwrt上改动一下dnsmasq的配置

/etc/config/dhcp

在末尾加上一段

config boot linux
        option filename 'pxelinux.0'
        option serveraddress 'tftp服务器地址'
        option servername '服务器名称'

至于服务器名称有没有要求……这个没试过,就照着本地的DNS名称填好了。

好了之后,重启dnsmasq,openwrt端的服务就算完成了。

接下来是pogoplug这边:

首先,是tftp服务器。安装tftp-hpa软件包,然后修改

/usr/lib/systemd/system/tftpd.service

中的tftpd根目录

[Unit]
Description=hpa's original TFTP daemon

[Service]
ExecStart=/usr/sbin/in.tftpd -s /srv/tftp/
StandardInput=socket
StandardOutput=inherit
StandardError=journal

先用/srv/tftp/做例子,先去下载https://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-6.02.tar.gz,然后解压。这里只需要里面的部分文件,包括这些:

syslinux-6.02/bios/core/pxelinux.0
syslinux-6.02/bios/com32/elflink/ldlinux/ldlinux.c32
syslinux-6.02/bios/com32/menu/vesamenu.c32
syslinux-6.02/bios/com32/lib/libcom32.c32
syslinux-6.02/bios/com32/libutil/libutil.c32

讲这几个文件拷贝到/srv/tftp/,然后在/srv/tftp/里面新建一个文件夹,来存放kernel和initrd。例如/srv/tftp/ubuntu,或者直接将ubuntu的镜像文件挂载到/srv/tftp/disks/ubuntu,可以让tftp客户端直接访问到。

然后,新建一个文件夹/srv/tftpd/pxelinux.cfg,在里面新建一个default的配置文件,内容如下:

DEFAULT vesamenu.c32
PROMPT 0
MENU TITLE OpenWRT PXE-Boot Menu

label Ubuntu
        MENU LABEL Ubuntu Live 13.10 64-Bit
        KERNEL disks/ubuntu/casper/vmlinuz.efi
        APPEND boot=casper ide=nodma netboot=nfs nfsroot=192.168.1.1:/mnt/extstorage/tftp/disks/ubuntu1310-64/ initrd=disks/ubuntu/casper/initrd.lz
        TEXT HELP
                Starts the Ubuntu Live-CD - Version 13.10 64-Bit
        ENDTEXT

说明文字可以自行更改,kernel和initrd会通过tftp获取,在获取到kernel和initrd之后,会通过nfs加载系统。

然后启动服务器

systemctl start tftpd.socket tftpd.service

如果需要自启动tftp服务器,则使用

systemctl enable tftpd.socket

至此,tftp服务器配置完成。

然后,是配置nfs服务器:

archlinux的nfs帮助似乎出了点问题,教程不是很完整,在网友的帮助下,发现原来服务没启动完成。

要安装nfs服务,需要安装nfs-utils。

然后,修改/etc/exports,这将会控制那些目录可以被访问,例如新增这段(根据上面pxelinnux的配置):

/mnt/extstorage/tftp/disks/ubuntu1310-64/ 192.168.1.0/24(ro,fsid=0,no_subtree_check)

将会允许192.168.1.*的客户端访问/mnt/extstorage/tftp/disks/ubuntu1310-64/。完成之后,用

systemctl enable nfsd.service rpc-idmapd.service rpc-mountd.service rpcbind.service
systemctl start nfsd.service rpc-idmapd.service rpc-mountd.service rpcbind.service

启动并自启动nfs服务器(吐槽:没密码真的大丈夫?)

配置过程中发生了许多问题,这里给后人稍微提供一下解决的思路:

1:openwrt的dnsmasq配置,有没有指向正确的tftp服务器,tftp服务器能不能访问;

2:nfs服务器的挂载有没有问题。

基本上都是权限或者配置文件出错……折腾了快2天……

神奇的sslh

最近回到公司总部上班,但是总部的网络环境略糟糕,屏蔽了绝大部分的端口,ping和tracert工具也失效了,只有80,443,110,25,143端口开放了,该死的网管连加密的imap和smtp端口都封了,真是让人吐槽无力。

因为封了22端口,所以不能远程连接回家里的路由,机缘巧合下,发现了一个神奇的东西,叫sslh

sslh是一个端口复用工具,它可以复用HTTP, SSL, SSH, OpenVPN, tinc, XMPP等协议,就是说同一个端口,你用SSH协议去连接,就会传递给SSH服务器,用SSL协议去连接,就会传递给https服务器,这不就是我想要的么!

配置文件非常简单,就只有那么几个选项:是否启用sslh,ssh服务器地址,https服务器地址,填上之后启动就OK。

这里要注意的是,sslh本身默认监听443端口,是和默认的https端口冲突的……但是默认的配置文件里面https的服务器地址就是127.0.0.1:443,这是需要修改的。

配置好之后用443端口SSH登陆,OK!再用https访问,OK!

 

使用rsync

参考:http://acman.bluenest.net/wordpress/archives/113

最近新入手只硬盘,准备将数据从一个硬盘迁移到另外一个硬盘,然后发现了rsync这个神奇的东西。

rsync的用法大体来说是

rsync 来源 目标

不同的是,来源和目标可以是绝对路径,或者是“协议://用户名@服务器地址”等等

可以选择用作本地或者远端的同步。当然,你也可以选择使用映射的方式,将远端的文件夹映射到本地,然后像本地操作一样使用rsysc,又或者,使用rsync自带的协议。

使用映射这个的方法就不说了,说说自带的rsync协议的用法:

你可以直接使用参数的形式或者使用一个配置文件(当然是配置文件这个比较方便),下面是配置文件的写法

address = 10.1.1.100 # 你要把rsyncd開在哪個ip上,建議不要開在public ip
pid file = /var/run/rsyncd.pid # pid file 所在,ubuntu可能可以省,不過個人習慣加上去
use chroot = yes # 這個建議加上去,因為可以限制只能對下面設定的目錄進行同步
log file = /var/log/rsyncd.log #記錄檔

#下面是設定哪些路徑可以跟遠端同步
[backup] # 命名,此名稱為遠端連線時要用
path = /home/acman/bin/ # 路徑
read only = false #是否為唯讀,此為否,代表遠端不只能抓,也能改;如果是 read only = true ,就代表遠端只能抓不能改
uid = 1000 # 連線時使用的帳號uid
gid = 100 # 連線時使用的帳號群組 gid
hosts allow = 10.1.1.100 #允許那個遠端ip連線過來
#[path2] 如果有其它路徑,就再用[…]開始設另一個

使用rsync –daemon –config=FILE来启动rsync服务器。

然后客户端连接服务器:

最簡單的使用方法,在客戶端下指令:
rsync -av 10.1.1.100::backup backup/
# 第一個backup要和設定檔的[…]中的設定一致;後面的backup/就看你要備份到哪裡了

如果你設定 read only = false的話,你還可以反向備份,就是把客戶端的東西備份上去:
rsync -av mydata/ 10.1.1.100::backup/mydate
這樣就會把客戶端的mydata目錄,直接備到server上的/home/acman/bin/mydata/底下了;這邊要注意的是,如果你是這樣下指令:
rsync -av mydata/ 10.1.1.100::backup/
那它會把mydata底下的檔案,備份到 /home/acman/bin/底下,不會另開一個目錄

rsync這個指令的好處是它會自行比對兩端的資料是不是一樣,只會傳輸有變動的資料
當然還有其它功能,如砍遠端檔案,或是忽略特定檔案或目錄等等

2.另外如果你不想要多開一個rsyncd服務的話, rsync指令也允許通過ssh來進行傳輸;不需要做上面那些設定:
只要遠端有開sshd,就可以備份遠端檔案或是將本地檔案備份過去
指令下法一樣,不過多了 “-e ssh”,如下:
rsync -e ssh -av 10.1.1.100::backup backup/

……
……
……

结果还是磁盘映射的方式比较方便啊。

在OpenSSH Server中禁用单个用户的密码登陆

最近发现有人老尝试登陆我的路由,让我感到非常不高兴。

于是稍微再网上做了一下搜索,找到了这个帖子,里面指出了解决办法:

1:直接禁用了该用户的密码。这个显然不符合我们的要求,禁用了之后luci不就废了么?

2:在sshd_config的最后,加上这么一段:

Match User myusername
PasswordAuthentication no

然后重启sshd,再次登陆的时候,就收到了提示,

Permission denied (publickey,keyboard-interactive)

OK了~

再去看系统日志,满屏的

Jan 17 11:53:04 Ferrets-Router auth.info sshd[9868]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:05 Ferrets-Router auth.info sshd[9870]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:05 Ferrets-Router auth.info sshd[9872]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:06 Ferrets-Router auth.info sshd[9874]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:07 Ferrets-Router auth.info sshd[9876]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:08 Ferrets-Router auth.info sshd[9878]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:08 Ferrets-Router auth.info sshd[9880]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:09 Ferrets-Router auth.info sshd[9882]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:10 Ferrets-Router auth.info sshd[9884]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:11 Ferrets-Router auth.info sshd[9886]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:11 Ferrets-Router auth.info sshd[9888]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:12 Ferrets-Router auth.info sshd[9890]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:13 Ferrets-Router auth.info sshd[9892]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:13 Ferrets-Router auth.info sshd[9894]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:14 Ferrets-Router auth.info sshd[9896]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:15 Ferrets-Router auth.info sshd[9898]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:16 Ferrets-Router auth.info sshd[9900]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:16 Ferrets-Router auth.info sshd[9902]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:17 Ferrets-Router auth.info sshd[9904]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:18 Ferrets-Router auth.info sshd[9906]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:18 Ferrets-Router auth.info sshd[9908]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:19 Ferrets-Router auth.info sshd[9910]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:20 Ferrets-Router auth.info sshd[9912]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:21 Ferrets-Router auth.info sshd[9914]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:21 Ferrets-Router auth.info sshd[9916]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:22 Ferrets-Router auth.info sshd[9918]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:23 Ferrets-Router auth.info sshd[9920]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:23 Ferrets-Router auth.info sshd[9922]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:24 Ferrets-Router auth.info sshd[9924]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:25 Ferrets-Router auth.info sshd[9926]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:26 Ferrets-Router auth.info sshd[9928]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:26 Ferrets-Router auth.info sshd[9930]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:27 Ferrets-Router auth.info sshd[9932]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:28 Ferrets-Router auth.info sshd[9934]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:28 Ferrets-Router auth.info sshd[9936]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:29 Ferrets-Router auth.info sshd[9938]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:30 Ferrets-Router auth.info sshd[9940]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:31 Ferrets-Router auth.info sshd[9942]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:31 Ferrets-Router auth.info sshd[9944]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:32 Ferrets-Router auth.info sshd[9946]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:33 Ferrets-Router auth.info sshd[9948]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:33 Ferrets-Router auth.info sshd[9950]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:34 Ferrets-Router auth.info sshd[9952]: Disconnecting: Too many authentication failures for root [preauth]
Jan 17 11:53:36 Ferrets-Router auth.crit sshd[9954]: fatal: Read from socket failed: Connection reset by peer [preauth]

这孩子还是没放弃呢……不过毫无疑问,破解密码这种事情就别妄想了。