三头USB数据线同时给Raspberry Pi和移动硬盘供电大法

对于Raspberry Pi和移动硬盘,通常的连接方法是电源适配器通过micro-usb连接Pi供电,然后再用一根USB数据将Pi和移动硬盘相连,但这样移动硬盘有很大概率因供电不足而无法正常工作。

鄙人在折腾过程中发现更为方便的供电大法,一根用于移动硬盘的三头USB数据线即可搞定Pi和移动硬盘的供电问题。当然,电源适配器最好选用输出电流较大的,来保证供电稳定性,鄙人使用的是Nexus 4手机的适配器(5.5V,1.2A)就完全满足,iPad的适配器当然也完全满足。

如下图,将Pi的USB A型数据口当作电脑的USB数据口与移动硬盘相连,三头中多出的另一辅助供电头连接到电源适配器即可。

Raspberry Pi技术笔记之五:打造家用翻墙网关

先前一直是hack路由器的方式来翻墙,方案是ddwrt加pptp,用了有差不多二年时间。稳定性是没有问题,只是前段时间入手天猫魔盒后在电视上看YouTube总是没法流畅播放,按理说家里20M的带宽是不会有问题。经过电脑直接挂VPN和路由器挂VPN对比测速之后,发现后者的带宽几乎只能达到前者一半,基本上确定是路由器性能问题了。于是开始考虑用Raspberry Pi来当翻墙网关,测试下来的结果是挂VPN后带宽完全没有损失,也就是说至少性能上是没有问题的。

下文介绍的方案中VPN服务端为Cisco IPsec VPN,客户端使用vpnc,另外用dnsmasq来将指定域名路由至OpenDNS来解析以对抗DNS劫持问题。Raspberry Pi所安装系统为Archlinux。

  1. 安装systemd和vpnc
    pacman -Sy systemd vpnc
  2. 修改vpnc配置文件/etc/vpnc/default.conf,需要配置的主要条目如下:
    # vpn server
    IPSec gateway $vpnurl.com  ## 替换为vpn服务器网域或者IP
    IPSec ID $vpn  ## 替换为groupname
    IPSec secret $vpn.psk  ## 替换为psk字符串
    Xauth username $yourvpnusername  ## 替换为用户名
    Xauth password $yourvpnpasswd  ## 替换为密码

    配置完成后,使用vpnc命令即可测试是否能够成功连接,如下则为成功案例:

    vpnc
    VPNC started in background (pid: 31049)...
  3. 下载vpnc的监控脚本ipsecmonitor.sh和路由分离脚本vpnup.sh,路由分离脚本的作用是将国内外IP的路由分离开来,即所有中国以外地区IP才走VPN通道,国内IP则不走VPN通道,这样可以在翻墙的同时保证国内网站的访问速度
    cd /etc/vpnc/
    wget https://raw.githubusercontent.com/bostoneboy/raspberry_pi_stuff/master/vpnc/ipsecmonitor.sh
    wget https://raw.githubusercontent.com/bostoneboy/raspberry_pi_stuff/master/vpnc/vpnup.sh
    chmod +x *sh
  4. 下载vpnc及监控脚本的service文件,并添加至开机自动启动
    说明:route-forward.service用来开启系统内核的路由转发功能及调整MTU大小
    说明:此方案中vpnc进程并没有添加至开机自动启动,而是待系统启动后由监控进程来拉启

    cd /etc/systemd/system/
    wget https://raw.githubusercontent.com/bostoneboy/raspberry_pi_stuff/master/system/vpnc.service
    wget https://raw.githubusercontent.com/bostoneboy/raspberry_pi_stuff/master/system/vpnc-monitor.service
    wget https://github.com/bostoneboy/raspberry_pi_stuff/blob/master/system/route-forward.service
    systemctl enable vpnc-monitor.service
    systemctl enable route-forward.service
  5. 安装 dnsmasq
    pacman -Sy dnsmasq
  6. 修改dnsmasq配置文件,示例如下,address用于指定主机名或域名对应的IP地址,server用于指定域名对应的解析服务器,示例中将被『污染』的域名指定到OpenDNS上来解析,配置文件以外的所有域名则按缺省走本地ISP的解析服务器
    vi /etc/dnsmasq.conf
    address=/pi/192.168.168.2
    address=/ipad/192.168.168.4
    address=/tmall/192.168.168.5
    address=/ddwrt/192.168.168.1
    server=/google.com/208.67.222.222
    server=/googlevideo.com/208.67.222.222
    server=/youtube.com/208.67.222.222
    server=/blogspot.com/208.67.222.222
    ... ...
  7. 下载dnsmasq的service文件,及添加至开机自动启动
    cd /etc/systemd/system/
    wget https://github.com/bostoneboy/raspberry_pi_stuff/raw/master/system/dnsmasq.service
    systemctl enable dnsmasq.service

重启系统,测试成功,将连网设备的DNS和网关地址修改为Raspberry Pi的IP地址即开始幸福的无墙网络生活。

Raspberry Pi技术笔记之二:配置密钥认证方式自动登录

一般来说,我们使用ssh登陆linux有密码和密钥两种认证方式,相较于前者,后者安全性更高,而且可以在不借助外部工具的情况下做到自动登录,下文介绍密钥认证的配置方法,适用于Raspberry Pi及linux/unix系统。

Macbook作为我的本地主机,Raspberry Pi作为需要ssh登录的远程主机,在本地主机上使用ssh-keygen命令生成一对密钥,即留在本地的『私钥』和分发到远程主机的『公钥』。

  1. 在本地主机上生成rsa密钥对,所有选择使用缺省选择即可,第三,四项中Enter passphrase建设留空,因为如果此处设置密码后每次ssh登录的时候仍然会需要输入此密码,当然如果是安全性要求较高的生产环境则建议设置此密码
    pagebrin:~ berton$ ssh-keygen -t rsa
    Generating public/private rsa key pair.
    Enter file in which to save the key (/Users/berton/.ssh/id_rsa):
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in /Users/berton/.ssh/id_rsa.
    Your public key has been saved in /Users/berton/.ssh/id_rsa.pub.
    The key fingerprint is:
    be:d9:d7:35:20:46:35:0b:f9:2f:34:2e:6d:58:e9:c9 root@raspberry
    The key's randomart image is:
    +--[ RSA 2048]----+
    ... ...
  2. 上传公钥到需要登录的远程主机,以密码认证方法登录到远程主机,切换至需要设置自动登录的用户下(以root用户为例),在其家目录下创建.ssh目录,用vi等文本编辑器将公钥内容(/$HOME/.ssh/id_rsa.pub)粘贴至authorized_keys文件即可,需要注意的是公钥内容一般为一个较长的行,中间不会有分行,需要留意粘贴后是否分行。
    [root@raspberry ~]# cd $HOME
    [root@raspberry ~]# mkdir .ssh
    [root@raspberry ~]# cd .ssh
    [root@raspberry .ssh]# vi authorized_keys
  3. 本地主机添加用于指定自动登录的config配置文件,需要说明项为:Host 指定自动登录主机名字符串
    HostName 远程主机的IP地址 或是 可以正确解析的主机名
    User 指定远程登录的用户名

    pagebrin:~ berton$ cd $HOME/.ssh/
    pagebrin:~ berton$ vi config
    Host pi
    HostName 192.168.168.2
    User root
    StrictHostKeyChecking no
    UserKnownHostsFile=/dev/null
  4. 至此配置完毕,在本地主机上使用 ssh 主机名字符串 即可自动登录
    pagebrin:~ berton$ ssh pi
    Warning: Permanently added '192.168.168.2' (RSA) to the list of known hosts.
    Last login: Sun Apr  6 18:42:02 2014 from 192.168.168.3
    [root@raspberry nas]# uname -a
    Linux raspberry 3.10.29-2-ARCH #1 PREEMPT Mon Feb 10 04:04:41 MST 2014 armv6l GNU/Linux
    [root@raspberry nas]#