SLKun 发布的文章

博客又又又搬家了&VPS折腾记录


搬迁到新的VPS

现在的博客已经从之前的Banwagon搬迁到了UltraVPS上, 虽然年付用从$19变成了$40, 但是依然感觉很值:
一方面是线路很棒, LA的QN机房, IPV6线路到达LA之后只要四跳总跳数是14跳, IPV4线路也是差不多的, 但是因为我这边要先去北京赛尔的机房所以总跳数是17跳.
另外一方面是配置感人, 双核2G+(50G+10G)SSD, 这个配置只要$3.33每月真的感觉很难找到第二家了, 何况还是KVM, 线路质量也好, 也支持IPV6, 简直完美.

为什么会是(50G+10G)呢...
这是因为我第一次见到有商家虽然说是50G, 但是其实另外给了你10G用来装系统, 然后50G是完全的数据分区的...
于是我用了btrfs, 将这两个虚拟硬盘做成了一个逻辑卷嗯[Btrfs大法好

详细的评测+安利可以看这篇博文: https://blog.cysi.me/2018/03/new-vps-ultravps-providerservice.html
我当初就是看了这个之后心动的_(:3」∠)_
50G的SSD虽然不多, 但是对于自用的Seafile完全足够, 而且2G RAM对于Seafile Pro的配置条件也完全满足, 嗯
所以现在这上面部署了我的博客和Seafile还有你懂的服务.

购买的话, 这家似乎支持PayPal, 然后反欺诈还蛮严格的, 请务必填上看起来没问题的联系信息, 不然订单不会通过审核的.

具体的使用情况的话, 可能是开会已经开完了, 所以SSH上去不会突然就断掉, 也没有SSH很卡的情况, 虽然没法和本地路由器比, 但是也还是可以接受的.
说起来, 这家的KVM居然可以通过cat /proc/cpuinfo看到CPU类型, 是E5-2670.
看起来似乎母鸡是多CPU的, 不过很迷啊, 为什么CPU是这么老旧的一代E5...这个CPU不是都上岸多年了吗...
不过反正便宜就不管那么多了, 而且我真的没有任何需要CPU性能的服务.
IO的话...大概读写240M/s的样子, emmm凑合吧, 毕竟便宜.
ping值从170ms-240ms不等, HTTP下载速度的话, 大概最快可以接近4M/s...
不过主要还是看脸的, 线路路由会随时间而变化= =
比如说一开始是从武汉移动从上海出国的, 然后现在就变成了走教育网从北京出国...
总而言之, 这么便宜, 又能满足各项需求, 很适合自己的情况, 还要什么自行车啊.

最近试用了一下Syncthing...不得不说线路质量真是棒啊_(:3」∠)_
在IPV4环境下的上下行带宽:
QQ截图20180410133805.png
上下行感觉很明显是被限制在20Mbps的样子...
看了一下路由感觉是走了学校的电信出口, 所以可能是在学校的出口被限速了吧应该
在IPV6环境下的上下行带宽:
QQ截图20180410133204.png
这个上行带宽真的是吓哭我了, 第一次在公网见到这么高速率好吗!
说起来这个上行带宽的上升曲线, 真是生动形象的TCP慢启动过程啊233
下行的带宽虽然不及上行带宽, 但是还是非常可以的.
明明服务器上用了BBR, 上下行的路由还是一样的, 为什么带宽差这么多呢_(:3」∠)_
不是很懂(有可能是网络环境的影响吧, 比如说被大量PT流量给拥塞了什么的

博客搬迁

博客系统还是Typecho, 这货在死了几年以后居然STM的诈尸了. 不过更新之后, 多了一个很棒的功能就是备份还原.
这样博客的搬迁工作就非常简单了, 只要在原博客上备份, 再来新博客上还原就好, 也不用倒腾数据库了, 而且似乎我也没啥文件的样子...

然后过了这么几年, 我也从服务器小白逐渐进阶, 原来用的是LNMP的一键安装包, 现在还是觉得手动配置Nginx和PHP比较好.
然后网站前几天也弄了全站HTTPS, 用的是Let's encrypt的证书啦, 不过因为用了cloudflare的CDN, 所以拿到的证书可能是cf的共享证书...
然后用了大佬的自动部署脚本: https://github.com/gileshuang/letsautoencrypt
这个站点还有多个备份域名, 比如说:
http://www.slkun.me / http://blog.slkun.me
http://www.doris.work / http://blog.doris.work
http://www.lovedoris.moe / http://blog.lovedoris.moe
= =嗯 那个lovedoris.moe是没有cf的CDN部署的
然后哦Nginx的部署其实还是折腾了一下的= =因为其实对Nginx并不熟悉, 配置如下需要的可以参考:

server {
    listen       localhost:port;
    server_name  domainName;

    access_log  /nginx/logs/typecho.access.log;
    error_log  /nginx/logs/typecho.error.log;

    root        webRoot;
    index       index.php index.html index.htm;

    location / {
        if (!-e $request_filename) {
            rewrite ^(.*)$ /index.php$1 last;
        }
    }

    location ~ '\.php(/|$)' {
        include        fastcgi.conf;
        fastcgi_pass   unix:/run/php-fpm/php-fpm.sock;
        fastcgi_split_path_info       ^(.+\.php)(.*)$;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO       $fastcgi_path_info;
    }

    # redirect server error pages to the static page /50x.html
    #error_page  404              /404.html;
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

VPS折腾史

在16年入手了Bandwagon的256M VPS以后, 突然看到这家又推出了PHOENIX AZ的Special套餐, 年付$18就可以有1G RAM+20G SSD, 于是脑子一热就入手了.
因为位置问题, 所以ping值是会高一些, 然后路由一般般吧. 性能的话...emmm Xean D-1540? 我第一次听说这个系列的志强= = IO还是一如既往的优秀平均500+M/s

本来之前用这个256M的主要是因为这款的机房可切换, 万一要是ip翻车我还可以换个机房继续用, 可是用了一年多感觉非常稳, 完全没有任何问题.
但是以防万一, 所以这个256M的还是一直在用, 然后那个1G的因为硬盘大内存多, 于是我就在上面装了Seafile的服务, 用于文件同步和备份.
Seafile的话又是一个可以吹一波的好用软件, 这个的话以后再写好了.

后来, 正好之前那个256M的到期, 加上Banwagon推出了KVM的VPS, 然后还是联通和CN2直连的, 内存也是512M, 年付$28. 考虑到IPV6我可以用之前那个PHOENIX AZ, 而且PHOENIX AZ的那个在公网的使用体验不佳, 原来的256M一方面是OVZ而且内存太小, 于是就入手了这个.
其实也考虑过别的VPS商家, 比如说DigitalOcean, Vultr, Linode之类的, 但是最低$5/mo的价格实在是感人肺腑, 而且开了Vultr和DigitalOcean试用, 线路带宽实在堪忧, HTTP下载速度不超过100K/s, 这个就非常尴尬了. 所以就觉得Banwagon虽然便宜, 但是还慢靠谱的(对于我的网络环境来说)
这个CN2直连果然还是满靠谱的, 因为KVM所以并不清楚CPU的型号, 但是IO如上一样平均600+M/s吧. 线路的话, ping只有160ms左右吧, HTTP下载速度基本是不会低于500K/s的, 一般是1M/s左右, 好的话可以到2M/s.

随着照片什么的备份多了起来, 逐渐感觉20G SSD开始不够用了起来, 而且PHOENIX AZ的这个的速度突然变得非常慢, 又是HTTP下载速度不超过100K/s的节奏(确切的说是ipv6线路, ipv4线路好像还可以). 而且这个是OVZ的虚拟化, 没法换内核, 也就没法BBR, 很多L2TP之类的操作也没法弄, 于是就开始物色有没有存储更多价格差不多的VPS来替换.

正好看到小伙伴有推荐Virmach, 然后看了一下感觉这个价格真...
我本来以为$20年付已经非常便宜了...没想到还是$10年付的OVZ, 甚至还有$12.5年付的KVM...
我只感觉这家是不是分分钟要跑路啊, 再加上看到这个其实有点犹豫.
但是看到年付$35的512M RAM + 500G HDD瞬间就没了脾气, 决定先开一个月试试看, 结果没注意是备货状态= =
不过前几天也正式部署了, 虽然说是500G, 但其实只有465G, 感觉像是挂了一个500G的物理硬盘的感觉...不会是单盘吧= =
性能嘛...嗯 真TM感人...和当年我笔记本的那个超薄7mm硬盘差不多...IO读写不上百你敢信? 大概只有50-70M/s的样子...
网络情况...虽然是在NY, 虽然ping值很高, 但是HTTP下载还可以, 平均2M/s左右吧...所以还是有点可用性的
不过的话, 我已经有了50G SSD的那个了, 所以这个其实没啥需求了嗯

关于VPS的推荐和介绍, 可以看一下这篇博文, 写得挺全的: https://yorkchou.com/host-provider.html
然后后悔自己黑五的时候怎么没多关注一下_(:3」∠)_

所以现在手上有三个VPS, 到时候可能那两个Bandwagon就不续费了, 然后考虑弄一个日本来玩嗯(如果Vultr$2.5有货的话)


【转/备份】用遗忘曲线背单词的具体战略:本人四年利用遗忘曲线背单词实战的总结,传授轻松牢固背单词的秘诀~


原文位于:http://blog.renren.com/blog/225966891/480203439

用本人四年利用遗忘曲线背单词实战的总结,传授轻松牢固背单词的秘诀~ (本人英语德语都这么背的,方法不断调整过,四年过去了,此最终版本感觉最有效率,感觉不传授给别人太可惜了,就花了两小时认真总结了一下,尽量做到简明易学~~欢迎借鉴!)

准备工作:A3纸 (也可A4纸横过来用,一排写的下五个单词即可)。 这就开始背新的单词吧!

  1. 每个新词前都标上序号,从1开始。
  2. 背新单词的方式是:连读带写三遍,写成一排。
  3. 每背完第n个生词后,复习第n-2, n-6, n-24个单词,复习方式也是连读带写,只要写一遍,与原先三遍写在同一行。

具体地说,就是:

  • 背完第1个、第2个单词后都没单词可复习;

  • 背完第3个单词后,复习第1个单词,之后每背完一个新单词就在第n-2列下挪一个单词复习,效果如下:

    新背单词边读中英文边抄写三遍 复习n-2 复习n-6 复习n-24
    (1) abase   abase   abase   abase 
    (2) abashed abashed abashed 
    (3) abate   abate   abate
    

  • 背完第7个单词后,不仅复习第5个单词,还要复习第1个单词,之后每背完一个新单词就在第n-2列和第n-6列各下挪一个单词复习,效果如下:

    新背单词边读中英文边抄写三遍 复习n-2 复习n-6 复习n-24
    (1)abase    abase    abase    abase   abase 
    (2)abashed  abashed  abashed  abashed 
    (3)abate    abate    abate    abate 
    (4)abbess   abbess   abbess   abbess 
    (5)abdicate abdicate abdicate abdicate 
    (6)abdomen  abdomen  abdomen 
    (7)abduct   abduct   abduct
    

  • 背完第25个单词后,不仅复习第23个、第19个单词,还要复习第1个单词,之后每背完一个新单词就在第n-2列、第n-6列和第n-24列各下挪一个复习。效果如下:

     新背单词边读中英文边抄写三遍 复习n-2 复习n-6 复习n-24
     (1) abase      abase     abase     abase    abase   abase 
     (2) abashed    abashed   abashed   abashed  abashed 
     (3) abate      abate     abate     abate    abate 
     (4) abbess     abbess    abbess    abbess   abbess 
     (5) abdicate   abdicate  abdicate  abdicate abdicate
     (6) abdomen    abdomen   abdomen   abdomen  abdomen
     (7) abduct     abduct    abduct    abduct   abduct
     ……
     (19) accede    accede    accede    accede   accede 
     (20) acclaim   acclaim   acclaim   acclaim 
     (21) accordion accordion accordion accordion
     (22) acrid     acrid     acrid     acrid 
     (23) acquiesce acquiesce acquiesce acquiesce
     (24) accredit  accredit  accredit 
     (25) acoutics  acoutics  acoutics
    

  • 背到第48个单词大约正好一小时,将第48个单词读写三遍并复习完第46、42、24个单词后,你会发现最后几个单词的第二遍、甚至第一遍复习都还没做。所以,过一分半钟复习第47、48个单词,再过一分钟复习第43、44、45个单词,此后再过4分钟再次复习第46、47、48个单词。

  • 然后调好闹钟,30分钟后复习第25至48个单词,这是剩余单词的第三遍复习。

  • 此后再过8个小时,将全部48个单词复习一遍。

  • 然后就是隔天以后的复习了:第m天除了完成当天所记单词的复习外,还要复习第m-1天(与上一次复习的时间间隔尽量准确到24小时)、m-3、m-7、m-15、m-31、m-63天的单词(若减后为负数则不用复习,是正数的都要复习)。

用这样的方法,一天背100个单词轻轻松松而且不易遗忘,不过不要连续背两个小时新单词,最好早上一次下午一次。

为了说明方便,我们给每48个单词归为一组,各标组别号1、2、3、4……奇数组都在9 am.背,在7 pm.复习;偶数组都在12 am.背,在10 pm.复习。

比如说,9 am.背了第1组单词,其第4遍复习时间大约是7 pm.,第5遍复习时间安排在第二天的7 pm.,以后每次隔几天以后复习第1组可以都放在7 pm.这个时间。第2组单词放在12 am.背,于是他们的第4遍复习时间就放在10 pm.,第5遍复习时间也安排在第二天的10 pm.,以后每次复习第2组可以都放在10 pm.这个时间。这样分散开来背和复习就不会导致负荷太重坚持不下去。

最后算个帐吧,我06年买的英语专业八级单词词汇必背手册上约有5000个单词,按照一天背96个生词的速度,52天能背完。因此,负荷最重的几天是第32至52天,届时每天总共复习6天的单词,即复习576个(包括当天新背单词),每次复习238个(因为奇数组合偶数组时间错开)。这计划本人试过,基本没有疲劳感,故推荐给希望高效背单词的同仁们!

注意:复习非常关键,如果某天有事没时间,宁可不要背新的单词,务必将过去背过的在这一天需要复习的内容复习一遍!否则搞不好要就事倍功半啦~


Hibernate 5.1.1 + Spring 4.2.9 + Proxool 0.8.3 踩坑记录


起因

折腾的原因完全来自于我不想把DataSource配置到Spring的ApplicationContext中去.
希望Hibernate能够单独用一个配置文件, 这样就可以脱离Spring单独调试数据库部分的代码.

前提

原本在Spring 3.x + Hibernate 2.x的条件下已经成功了, 但是迁移到新版本就产生了各种各样的神奇的坑.

第一个坑

在新版本的Hibernate中, 在不使用org.apache.commons.dbcp.BasicDataSource的情况下, 似乎是不能用内置的默认连接池的.
大概看了下, Proxool似乎性能比较好, 用的比较多于是打算用这货.

抄了下网上常见的配置, 大概是这样的:

        <property name="hibernate.connection.provider_class">org.hibernate.proxool.internal.ProxoolConnectionProvider</property>
        <property name="hibernate.proxool.pool_alias">DBPool</property>
        <property name="hibernate.proxool.properties">test.properties</property>

可是...并不能找到配置文件, 从Trace一层一层网上看, 似乎是不知道传进去的路径是什么类型...
想了想, 加了file://可是依然不行= =
翻了好久源码, 突然看到...这货好像是从classpath开始搜索的...
放在classpath下果然就行了= =

第二个坑

Caused by: org.hibernate.service.UnknownUnwrapTypeException: Cannot unwrap to requested type [javax.sql.DataSource]

因为我把数据源配置在proxool里面, 所以明面上并没有给HibernateTransactionManager显式地传数据源...
可是HibernateTransactionManager在初始化的时候发现没有数据源会非常执着的去拿数据源, 拿不到还会去找ContentProvider要...可是并不能unwrap到数据源于是就报错了...
解决也很简单, HibernateTransactionManager有一个叫做autodetectDataSource的属性, 将其改为false即可.

第三个坑

其实算是我自己作死...
因为为了省事我把MVC和Spring的ApplicationContext写在一起了...
然后proxool会报错说配置文件已经配置...[md不能智能一点么]
想了想之前看的Spring文档, 好像Spring的Application和MVC并不是同一个Context.
又看了下web.xml...好像在ServletContext和Servlet的init-param里面指定了两遍...
于是把sessionFactory单独拿出来放在Application的Context配置里就可以了= =

第四个坑

这个也是很迷...看之前的书, 他告诉我Hibernate的current_session_context_class属性应当设置为thread.
我也就照着做了...可是我在执行任何操作的时候都会和我说Transcation没有ACTIVE???
追踪到TransacationManager里去也发现这里面的Transcation也正常的ACTIVE了.
可是执行的时候却拿不到ACTIVE过的session???
认真看了源码...好像它每次执行数据库操作的时候都是从Factory生成一个Session然后就去执行了...EXECUSE ME???
TransacationManger管理的Session呢???
查了好久发现...这篇文章难怪= =拿不到TransacationManger管理的Session啊_(:_」)_

配置了<property name="current_session_context_class">org.springframework.orm.hibernate5.SpringSessionContext</property>马上就好了(╯‵□′)╯︵┻━┻


使用树莓派3构建校园网关路由器


为什么我要采用树莓派3作为路由器

我原来的用的无线路由是WR841N, 刷了Openwrt, 用于锐捷认证和提供ipv4网络.
前些日子折腾在路由器后提供ipv6网络, 可是学校网络不支持relay mode, 因此只能在路由上配置NAT6.
然而NAT6是非常消耗资源的一项操作. 当北邮人PT下载跑满百兆带宽的时候, 路由器的负载就会上到5以上.
担心长时间路由器会HOLD不住, 所以萌生了购买了一个新的路由器的想法.
本来已经看好了MT7610a的小米路由mini, 但是转念一想为什么不用树莓派搭建一个网关呢.
成本并没有增加多少, 而且5V的供电也可以在没电之后继续使用移动电源使用.
更何况树莓派3的四核A53比起MT7610a的性能不知道好了多少倍.
以及我并不需要千兆无线, 而且MT7610a只有百兆有线.

除了树莓派3的其他选择

在同等价位来考虑, 其实香蕉派M2+其实是一个更好的选择.
香蕉派M2+的劣势下在于四核A7@1.2g比起树莓派3要差.
但是, 优势同样非常明显.
树莓派3的最大缺点就在于IO带宽, 其物理拓扑结构是主芯片引出一个USB2.0接口到网卡同时作为HUB引出四个USB口.
也就是说, 板载的网卡LAN9514和四个USB接口同时共用一个USB2.0的480Mbps带宽.
当需要进行大IO操作时, 劣势就明显的体现出来了.
香蕉派M2+的网卡以及两个USB口都是直连芯片的, 只受到AMBA带宽的限制.
根据我看到的实测数据大概可以达到60+MByte/s, 相比之下, 树莓派的实测数据只能到10+MByte/s.
如果需要更大的IO带宽, 那么最好还是右转上J1900这样的凌动x86, 大概也只要500左右.
除了IO带宽以外, 香蕉派M2+还板载8G emmc. 相比TF卡, 稳定性大大提升, 同时也省下买TF卡的钱.
不过我倒是有一大把闲置的TF卡, 其实倒不是什么问题.
以及, 在香蕉派上有官方提供的Android系统, 以后也可以改造成电视盒子使用.

至于, 为什么最后还是选择了树莓派...原因还是更好友好的社区支持嗯.
换而言之就是用的人多, 踩坑的概率小= =

硬件准备

树莓派3一只. USB有线网卡一只, TF卡8G一只, 5V2A电源一只(5V1A也可以)

开工

在系统的选择上, 我采用的是Openwrt的衍生系统LEDE.
根据官方Wiki的叙述, 大概就是Openwrt的一帮开发者看Openwrt的低效不爽, 自己另外开个新坑的感觉.
不过, 确实LEDE的内核版本会比Openwrt要新, 所以就用它了.

LEDE的下载地址: https://downloads.lede-project.org/snapshots/targets/brcm2708/bcm2710/
下载那个: lede-brcm2708-bcm2710-rpi-3-ext4-sdcard.img.gz 就好了√

安装请参考Openwrt Wiki: https://wiki.openwrt.org/toh/raspberry_pi_foundation/raspberry_pi
简述的话就是在Linux内:

dd if=lede-brcm2708-bcm2710-rpi-3-ext4-sdcard.img of=/dev/sd* bs=2M conv=fsync

值得注意的是, 这会更改TF卡的分区表, 如果有什么数据的话, 请做好备份.
默认的话, 会分出一个20M的/boot分区和一个256M的/分区. 显然没有很好的利用好TF卡的空间.
所以, 我们还需要重新对TF卡分个区. 这可以使用GParted做到:

sudo apt-get install gparted
sudo umount /media/username/* #使用GParted前先取消挂载
sudo gparted

只要File-Device选择TF卡, 然后右键分区, 选择Resize就可以调整分区大小了√

Wiki中还提供了一些有用的信息:
比如说可以通过GPIO连接串口:
115200 8N1

Pin 6Pin 8Pin 10
GroundTXRX

以及可以通过修改/boot/config.txt文件修改一些配置.

修改软件源

很遗憾, 官方默认的软件源在国内的普通网络情况下似乎是连不上的.
而且, 官方的软件是滚动更新的. 一旦换了内核版本简直就是噩梦...
特别是opkg还没有提供upgrade的功能_(:3」∠)_
所以, 我特意把我安装时的软件源镜像了一份存在了服务器上. 大概一共才500M不到吧√
地址是: http://raspberrypi.slkun.me/mirror/LEDE/20161119/
速度什么的另说...至少以后官方滚内核的时候, 可以保证还有旧的软件可以用.
服务会在我还在用这一版的前提下会一直提供的嗯.

新版的17.01和18.06已出, 该镜像不再维护

软件源的配置文件在: /etc/opkg/distfeeds.conf

src/gz reboot_core http://raspberrypi.slkun.me/mirror/LEDE/20161119/core/
src/gz reboot_base http://raspberrypi.slkun.me/mirror/LEDE/20161119/base
src/gz reboot_telephony http://raspberrypi.slkun.me/mirror/LEDE/20161119/telephony
src/gz reboot_packages http://raspberrypi.slkun.me/mirror/LEDE/20161119/packages
src/gz reboot_routing http://raspberrypi.slkun.me/mirror/LEDE/20161119/routing
src/gz reboot_luci http://raspberrypi.slkun.me/mirror/LEDE/20161119/luci
#src/gz reboot_usr http://raspberrypi.slkun.me/mirror/LEDE/20161119/usr

usr目录是打算放我自己编译的一些软件, 现阶段就是mentohust咯.
请手动下载安装, 目前还没有配置Packages信息.

网络配置

默认配置的树莓派的网口为lan口, 是一个静态的192.168.1.1的ip, 没有dhcp服务器也没有dhcp客户端.
而且默认配置的LEDE也没有安装luci, 只能通过SSH登录.
因此, 需要修改/etc/config/network文件将其修改成为dhcp客户端模式以能够连上网.

config interface 'loopback'
        option ifname 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config globals 'globals'
        option ula_prefix 'fd8f:4e62:2b25::/48'

config interface 'lan'
        option ifname 'eth0'
        option proto 'dhcp'

这样只要把树莓派的lan口连上可以上网的路由器就可以了.

LEDE内部配置

系统镜像准备好之后, 把TF卡插进树莓派, 然后上电.
通过查看路由器的DHCP表来获得树莓派的ip, 当然也可以在网络配置时采用静态ip.
但是需要注意配置正确的网关, 不然内网可以访问到树莓派, 但是树莓派不能通过路由上网.

硬件驱动

我用的USB网卡是ASIX AX88772B, 虽然很廉价, 但是基本上也能够跑满100M的带宽.
确认路由器可以连上网以后, 安装驱动:

opkg update
opkg install kmod-usb-net kmod-usb-asix

这样使用ifconfig就可以看到eth1的第二张网卡了.

安装Luci

opkg install luci luci-i18n-base-zh-cn luci-i18n-firewall-zh-cn luci-theme-material

安装一些实用工具

opkg install ipset vim-full git git-http zsh curl libustream-openssl
opkg install wpad

安装Mentohust

ipk包可以从镜像下的usr分类下下载.

opkg install mentohust luci-luci-app-mentohust

注意不要直接使用mentohust的交互式命令行输入用户名和密码.
该编译版本与shell不太兼容, 我也懒得去找为什么.
直接使用/etc/mentohust文件配置, 或者通过luci就好.

安装ipv6 NAT支持

opkg install kmod-ipt-nat6

添加启动时脚本到/etc/rc.local

#!/bin/sh /etc/rc.common

# For enable mentohust for sure at startup
MAX_TRIES=60
COUNT=1
PING_TEST=$(ping -w 3 www.baidu.com | grep "3 packets transmitted, 3 packets received")

# detecting internet is ok
while [ ! -n "$PING_TEST" ]
        do
        if [ $COUNT -gt $MAX_TRIES ]
        then
                logger -t MENTOHUST "Cannot access the Internet (reached retry limit $MAX_TRIES times)" && exit 1
        fi
        mentohust -k
        sleep 10
        mentohust -d
        sleep 60
        logger -t MENTOHUST "Try to connect the Internet... ($COUNT time)"
        COUNT=$((COUNT+1))
        PING_TEST=$(ping -w 3 www.baidu.com | grep "3 packets transmitted, 3 packets received")
done
logger -t MENTOHUST "Internet is accessible!"

# NAT6 init script for OpenWrt 
# Depends on package: kmod-ipt-nat6 ip6tables
# Ref:  https://wiki.openwrt.org/doc/howto/ipv6.nat6

MAX_TRIES=60
WAN6_NAME="wan6" 
WAN6_INTERFACE=$(uci get "network.$WAN6_NAME.ifname") 
LAN_ULA_PREFIX=$(uci get network.globals.ula_prefix)
PROBE=0
COUNT=1

# detecting ipv6
while [ $PROBE -eq 0 ]
        do
        if [ $COUNT -gt $MAX_TRIES ]
        then
                logger -t NAT6 "No IPv6 route found (reached retry limit $MAX_TRIES times)" && exit 1
        fi
        sleep 30
        logger -t NAT6 "detect IPv6 route... ($COUNT time)"
        COUNT=$((COUNT+1))
        PROBE=$(route -A inet6 | grep -c '::/0')
done

ip6tables -t nat -I POSTROUTING -s "$LAN_ULA_PREFIX" -o "$WAN6_INTERFACE" -j MASQUERADE
logger -t NAT6 "configure the IPv6 NAT table: $LAN_ULA_PREFIX at $WAN6_INTERFACE"

WAN6_GATEWAY=$(ifconfig "$WAN6_INTERFACE" | grep 'Global' | awk '{print $3}'| awk -F':' '{print $1":"$2":"$3":"$4"::1"}')
logger -t NAT6 "get the gateway of IPv6: $WAN6_GATEWAY"

route -A inet6 add default gw "$WAN6_GATEWAY" dev "$WAN6_INTERFACE"
logger -t NAT6 "set the gateway of IPv6: $WAN6_GATEWAY at $WAN6_INTERFACE"

logger -t NAT6 "IPV6 Configure done!"

exit 0

前一部分是刚开机时(早上来电时)如果发现认证不成功没有网, 就反复尝试认证直到成功为止.
第二部分是判断网络是否存在ipv6, 如果存在则建立ipv6 NAT转发.

配置网络

最后需要把网口做出合理的分配. /etc/config/network

config interface 'loopback'
    option ifname 'lo'
    option proto 'static'
    option ipaddr '127.0.0.1'
    option netmask '255.0.0.0'

config globals 'globals'
    option ula_prefix '1111:2222:3333:4444::/64'

config interface 'lan'
    option ifname 'eth1'
    option force_link '1'
    option type 'bridge'
    option proto 'static'
    option ipaddr '192.168.1.1'
    option netmask '255.255.255.0'
    option ip6assign '64'

config interface 'wan'
    option ifname 'eth0'
    option proto 'dhcp'
    option hostname 'Raspberry_Pi'
    option peerdns '0'
    option dns '223.5.5.5 208.67.222.220 202.114.0.242'

config interface 'wan6'
    option ifname 'eth0'
    option proto 'dhcpv6'

结束

完成配置之后重启, 将wan口接在树莓派本身的网口上, 下级交换机/路由器接在USB无线网卡上就可以正常工作. 其他关于Openwrt的配置就自己发挥想象咯.
在树莓派上, 性能和存储容量基本上不是问题, 唯一的限制点就是IO带宽了.
如果要挂移动硬盘之类的, 请注意供电和速度, 或者直接上香蕉派/凌动工控主板就好了.


博客迁移工作


原本博客是挂在AwardSpace下的, 最初用的是免费套餐, 去年这个时候Basic促销只要$3一年就顺手入了.
现在Basic到期了, 续费的价格就比较感人了, 一年得$60.

正好一直都想入手一个VPS玩, 最近又查了一下发现了Bandwagonhost这家服务提供商, 最低级的套餐一年只要$19.
虽然只是单核, 256M RAM, 10G SSD和500G月流量, 但是像我这种日PV不会上10, 月PV不会上100的个人站点就随意了.
至于为什么不用Hexo这样的静态博客的话, 是因为想用PHP写点自己用的小服务什么的.
而且上了VPS的话, 那么SS的钱就可以省下来了, 而且也可以搭个VPN, 怎么看都觉得很棒.

怎么买这种事情就不说了, 可以银联, 支付宝和信用卡付款, 长时间有着5%off的优惠, 自己找找优惠码就好了.
有一点值得注意的是, 除了上述的通用套餐外, 还有为中国特别优化过链路的和性能配置好很多的另外两个套餐.
但是, 他们不能换机房, 也就是不能换ip. 万一以后被GFW吃了, 就GG. 以防万一, 还是入手了这个.

性能的话, 据说这家VPS是有很大的超售的.
SSH登录上去的感觉就是卡卡卡卡卡卡卡卡. 但是毕竟这么便宜, 要求也就不要太高了.
虽然SSH上去卡, 但是性能什么的感觉其实还行. 编译各种乱七八糟的组件也还挺快.
CPU是E3v5, 最大睿频4G. SSD RAID10的读写能够有900M/s左右.
网络速度, 我这边ping差不多是160+ms. 下载速度, 会从900+K/s慢慢涨到2M/s.
总而言之, 就是凑合用还是能行的, 要求别太高了. 毕竟便宜.

我用的博客系统是Typecho, 相比WordPress还是快不少, 原生支持MarkDown, 虽然不是太完美.
迁移主要分为两个部分, 一是从数据库导出数据. 另外一部分是下载文件.
数据库导出数据直接使用PHPMyAdmin就好了. 下载文件用FileZilla下载.
下载文件的时候就能够感受出来, 原来的主机商比新的VPS慢= =
毕竟欧洲还是没有美国西海岸近, 从网络拓扑上来说.

需要注意的就是, 修改config.inc.php里的数据库配置文件.
我在VPS安装的服务器是LNMP-1.3, 提供了很方便的脚本.
Nginx据说比Apache省内存, 适合像我这种内存比较紧张的情况.
对于Typecho而言, 默认安装, 在进管理员界面的时候会404.
需要修改/usr/local/nginx/conf/vhost下的站点配置文件
将include enable-php.conf -> include enable-php-pathinfo.conf
然后重启lnmp就可以了.

我在迁移中遇到的另外一个问题是, 数据库导入option表以后, HTTP 500内部服务器错误.
如果全新安装的话就不会有, 是正常的.
因为自己的文章不多, 外带想删掉以前的一些东西.
就干脆不要原来的数据了, 直接全新配置一遍.
以前的文章数据直接从导出的数据库文件里复制就好了.
只要把rn变成换行, 那么就和你在后台输入的内容是一致的.[Markdown大法好

顺带还尝试配置了一下IPSec Over L2TP, 但是好像内核并不支持IPSec...暂时就不折腾了吧