day 2 Izmir

  • 7.22

4点多就醒来了,不睡了. check out 后,跟着 Sygic 绕了半天,辛苦到达 Ido 车船渡码头. 提前网上买票会便宜点, 到码头后要换票.

大船有三层,下二层装车,最上层装人. 提前定好有小桌子的位子更好, 比如现在就能在小桌子上放电脑写 blog. 当然依然没有 wifi,我们也依然没有搞定流量卡.

在码头找到四叶草,总算取到了TL现金. 码头工作人员很贴心的开铁门让我们抄进路 ATM 来回.

船开得要比想象中快.

到 Bandırma 后直接开往 Izmir,在上 D565前看到有个比较大的超市,进去补充饮用水. 樱桃是三块多,但太成熟. 边上的 CAFE 吃了午饭,很便宜也挺好吃.

300KM 约三个小时到达 Izmir,温度一下高了起来,38度左右.

流量卡是头等大事,问了 N 家未果,主要问题是语言不通. 最后在AEVA解决家解决,经理给我们定制了一个2.5G,为期一个月的流量卡.

晚餐去了附近天书推荐的老餐厅,生意很好,味道还行,价格稍贵.

tips

  • D565看起来要升级到 E881,大部分路都做了翻新,只有小部分是老路.总路况都相当好.
  • 有路口或经过小镇,都会有90,70,50不等的限速标志,要控制下车速.
  • 路上车辆还是比较少的.
  • 开在左车道,后面还是很经常有车闪你,滴滴你,让开让他们飞走吧.
  • 5个小时的时差,晚上9点会开始感觉人在飘了.
  • 晚上8点太阳太落山,要防晒防热.

day 1 Istanbul

  • 7.21

今天大部分时间都在空中度过了,SU209 9个小时,SU2132 5个小时.转机莫斯科约一个小时.

值得高兴的是碰上了 SU209 只有15%的准点率, 提前5分钟到达莫斯科,因为很远很远的登机口,刚刚够赶上 SU2312.

仍然提前5分钟到达 istanbul,不过,筒子们,苦难刚刚开始,入境处的混乱长龙先吓了一跳,无人管理,粗粗的龙啊,眼熟吗?然后,科普一下,土国机场的行李车是人力驱动的,对,你没看错,人拉的!!!一车也就6~8个箱子,我那个去啊,等行李整整45分钟!!!320的小飞机啊!!!!

要在机场买上网卡的估计要失望了,Vodafone的说没有旅客上网卡,Avea的人多的等死,最后Turkcell柜台像菜市场,最终只能放弃。

AVIS 取车很顺利,运气很好,是辆全新的车,总里程27KM.

  • 没有免费 wifi
  • 行李车要准备1TL 硬币
  • 托运行李要等很久
  • 没买到流量卡

1TL硬币可以多准备点,不少地方的洗手间用得上的.

Holiday inn 机场店服务人员挺热情,硬件差了点,关键没拖鞋...

tips

  • AVIS 车上已经贴好 HGS, 还车时结算通行费
  • 只查看了中国驾照,没要求出示翻译件或公证书
  • 刷了2000TL 作保证金
  • 买了全险,出任何问题 CALL AVIS 就行
  • 满油给的车
  • 当前油价4.6TL/L 左右

ABB 加入在线编辑功能,可以在线新建,编辑 md 文件,并发布静态网站.

为简化代码

  • 图片功能用 七牛存储 解决.(所以上传功能没有开发.)
  • 访问控制用 nginx 解决.
  • 文件同步用 git 解决.

使用方法:

写新文章

  • 点击 新建,会生成 md 模板,在模板中修改 tags 并加入正文. 插入图片用 七牛存储 的外链.
  • 点击 保存,会在服务端保存 md 文件. 未保存的文件不会被发布, 但会自动保存在客户端.
  • 点击 发布,会生成整个网站的静态页面,并发布到指定的目录.

编辑文章

  • 点击 打开,选择要编辑的文章名
  • 编辑 tags 或正文
  • 点击 保存
  • 点击 发布

删除文章

  • 点击 打开,打开要删除的文章.
  • 点击 删除
  • 确认后,会删除当前打开(编辑)的文章.

mac os 默认文件系统不区分大小写. 简单解决方法建立一个新的磁盘映像,并使用大小写相关的文件系统,装载后将需要大小写相关的文件放在映像盘上.

文件系统

另外 git 默认也不关心大小写问题,临时可用先删除文件,再添加进去的方式解决,或者加入配置选项:

git config core.ignorecase false

ABB(Ahui Blog Build)断断续续自己一个人在用着, 基本上没太大问题. 为方便生成另外的站点,做了些调整.

  • config.py 中设置新站点参数,模板调整为通用,从 config中取得站点信息.
  • 生成的 html 文件名,全部用小写.
  • 模板加入 goto.html 文件,用于跳转以前的老旧页面到首页.
  • 模板中加入网站统计变量,统计代码可在 config.py 中设置.
  • 生成整站时,输出相关信息.
  • github 地址为 https://github.com/ahui/abb

其中 goto.html 主要用于自己博客. 因为最早用 wordpress, 后来的 abb 又生成过大小写敏感的 html,导致搜索过来的页面地址有差异. 而生成整站静态 html 时,为了能本地查看,均使用了相对地址, 这样 nginx 的 try_file 重定向的首页,会导致 css,js 无法正常取得,最简便的方法是定向到 goto.html,然后用 JS 重定向到首页.

另外 duosuo 评论,偶尔会导致加载时间达10秒,暂时在模板中去除.

ABB 程序与 GITHUB 同步.

最近一次生成信息:

./abb.py build
总共生成 68 篇文章.
总共花费时间: 0.098921 秒.

生成性能大约为每秒700篇文章,硬件为 RMBP 15, CPU i7.

ssh 登录阿里云远VPS,提示

ssh_exchange_identification: read: Connection reset by peer

几月前出过一次同样问题, 表现在开发机无法登录阿里云 VPS,但可以正常登录HK VPS,而且 HK VPS 也可以正常登录阿里云VPS. 检查下来是阿里云机房误判攻击并阻断了我当前在用的移动IP(移动出网 ip 会被 nat 到一组特定 ip 上),提交工单后才解决.

这次再用 HK VPS 检查,发现也无法登录,应该不是原来的老问题. 本机详细登录日志:

#ssh ahui$ ssh -vvv -l root serverip
OpenSSH_6.2p2, OSSLShim 0.9.8r 8 Dec 2011
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug1: /etc/ssh_config line 102: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to serverip [serverip] port 22.
debug1: Connection established.
debug3: Incorrect RSA1 identifier
debug3: Could not load "/Users/ahui/.ssh/id_rsa" as a RSA1 public key
debug1: identity file /Users/ahui/.ssh/id_rsa type 1
debug1: identity file /Users/ahui/.ssh/id_rsa-cert type -1
debug1: identity file /Users/ahui/.ssh/id_dsa type -1
debug1: identity file /Users/ahui/.ssh/id_dsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.2
ssh_exchange_identification: read: Connection reset by peer

本机改过 hostname,rsa 没做更改, 同样的 rsa 能登录 HK VPS,应该和证书没关系.

阿里终端连接进去,发现 ssh localhost 居然也无法正常登录,问题应该在 sshd 服务本身.

想到服务器几周前做过一次 apt-get upgrade, 应该是更新导致 sshd 出了问题. 重启 sshd, 问题依旧.

google 结果大部分说是 hosts.allow 的问题,加入 sshd:ALL 后,问题依旧.

最后查看 sshd log:

May  4 17:05:15 AY1407211542405399a6Z sshd[17586]: fatal: Missing privilege separation directory: /var/run/sshd

发现/var 下 run 目录不存在.

cd /var
mkdir run
cd run
mkdir sshd

重启 sshd,问题解决.

问题可能出在 apt-get upgrade 后,服务器没重新启动导致问题出现. 或者本次 upgrade有 bug,重启也不能解决. 没证实. 记录下,系统为:

uname -a
Linux AY1407211542405399a6Z 3.13.0-32-generic #57-Ubuntu SMP Tue Jul 15 03:51:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
cat /etc/issue
Ubuntu 14.04.2 LTS \n \l

n2n 是点对点类型的 vpn, 轻量级,容易安装与配置.

官方网站在这里

在安装使用中,还是碰到几个小坑,记录下来. 另外其版本有 v1,v2二个,这里都使用 v2版本. 其用法二个版本都一样,但不同版本通信协议不兼容, 所以所有节点都要使用相同的版本.

使用场景

边缘节点有三个

  • zte h610b 路由器,安装 tomato, 无公网 ip
  • RMBP 工作用电脑,安装 mac os, 内部 ip
  • hk vps 一台,安装 ubuntu,有 固定公网 ip,地址为 a.b.c.d

超级节点一个,也就是上面有 ip 的 vps.

安装记录

hk vps

ubuntu 上安装最简单. 但 apt-get install n2n 是 v1的版本.我这里要用 v2,自己编译下.

sudo apt-get install subversion build-essential libssl-dev
svn co https://svn.ntop.org/svn/ntop/trunk/n2n
cd n2n/n2n_v2
make

然后就能生成需要的二个文件,超级节点守护程序supernode及边缘节点通信程序edge. 安装libssl-dev 有时候会进坑,报错说已经安装的 ssl 版本太新. 修复方式是在/etc/apt 源里,添加对应的 updates 源,更新后再安装. 如:

deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted

首先启动超级节点,监听端口999

sudo ./supernode -l 999

然后本机也做为边缘节点启动

sudo ./edge -d n2n0 -a 10.1.1.10 -c ahuin2nvpn -u nobody -g nobody -k ahuin2nvpn -l a.b.c.d:999 -m ae:e0:4f:e7:47:1a

其中一个小坑就是 -m 参数. 如果不指定,会产生一个随机 mac 地址,这样至少调试的时候多次运行,会出现 mac 混乱. 但指定的 mac 地址,有些不会识别,比如随便写个 ab:ab:ab:ab:ab:ab, 程序不会识别并自动产生一个新的随机 mac. 跳坑方法是找个真实的 mac 地址,然后改动最后二位.

zte h610b 路由器

这个真的没有真 ip,用的移动光纤,给了个看上去象真的,其实是假的 ip.

tomato 有人做好了现成的版本, 打开 jffs 并挂载,然后把编译好的 n2n 放在/jffs/n2n 中. 备注:我用的地址1上的版本.

下载地址1 以及 下载地址2

加载一下 tun 设备

modprobe tun

运行很简单

./edge -d n2n0 -a 10.1.1.20 -c ahuin2nvpn -u nobody -g nobody -k ahuin2nvpn -l a.b.c.d:999 -m ae:e0:4f:e7:47:2a

运行后,ping 10.1.1.10能通,反之不行.

设置 iptables

iptables -I OUTPUT -o n2n0 -j ACCEPT
iptables -I INPUT -i n2n0 -j ACCEPT
iptables -I FORWARD -o n2n0 -j ACCEPT
iptables -I FORWARD -i n2n0 -j ACCEPT

ok,现在能与10.1.1.10互相 ping 通. 此时二台机器可以认为在同一个局域网.

RMBP 工作用电脑

mac 上坑最多. 前提之一开发环境已经就绪,git svn 都 ok. 我这里用 git

首先安装 tuntap, 在这里下载

下载源代码并编译:

git clone git://github.com/certik/n2n.git
cd n2n/n2n_v1
make

出错啦,编译失败. 有好人做了补丁, 打完后再 make, 通过.

或者手动修改, 删除void tunclose(tuntapdev *device); 这行,并将tunclose(device);替换为tuntapclose(device);,改动这二处就 ok.

mac 下会自动生成 tun 设备 tap0, 所以运行时不用指定-d 参数:

./edge -a 10.1.1.30 -c ahuin2nvpn -u nobody -g nobody -k ahuin2nvpn -l a.b.c.d:999 -m ae:e0:4f:e7:47:3a

大功告成,现在10.1.1.10, 10.1.1.20, 10.1.1.30三个节点都能互相 ping 通, 并互相访问所有端口,就象在同一个局域网里面.

问题

理论上超级节点并不参与数据转发, 不过我测试的时候,ping 包至少是转发了的, 估计是与边缘结点没有公共 ip 有关. 其他流量没测试.

n2n 是点对点的, 如果想要把边缘结点后面的局域网也连起来, 应该能 通过在节点上通过手动指定路由并做 nat来实现, 当然这样配置起来就麻烦多了.

n2n 的最佳应用,应该是通过外网访问内网,特别是内网没有公共 ip 的时候,比如移动光纤...

要通过 n2n 访问一些不存在的网站,要做额外工作,可能 openvpn 更适合.

可以用下列方式联系我, 但不保证有回复...

Email: ahui at ahui.us