月度归档:2013年06月

把树莓派打造成智能无线路由器(可对国外网站自动选择线路)

本文的目的是教大家访问特定网站时走加密线路(vpn)时更加方便不用来回切换网络

前提

能有正常上网的环境 即pi插上网线后就能上网(如何上网不在此文讨论范围)

  1. 树莓派一个 (B型的带有线网卡)
  2. USB无线网卡一个( 我的是在京东上买的 二十块钱左右)
  3. vpn账户一个,并且能正常连通上网

我这里用的是openvpn,如果你有国外vps 如何配置请查看  OpenVPN安装配置教程

在这里我只简单说下客户端的配置

开始配置

eth0是我的有线网卡 已经获自动获取了ip(我现在就是通过有线ssh控制pi的)

wlan0就是那个无线网卡了(一般情况下是wlan0,若没有的话,你可以输入lsusb,看一下有没有显示出 你的无线网卡设备 。没有的就是驱动问题。)

修改 网络配置文件 给wlan0设置固定ip 在这里我设置的是192.168.10.1

注意一定不要和eth0在同一个网段
另外若你启用了wicd等网络管理服务请关闭

1 vpn客户端配置

安装openvpn,这里我们只是用它的客户端功能(如何配置,看上面的连接)

下面是我的配置文件

需要注意的是

这几个证书文件最好写成得路径,否则执行命令

会提示找不到这几个文件
只有cd /etc/openvpn/ 然后 openvpn client.conf 才行
若配置的没有有问题的话 输入ifconfig 会多出来一个虚拟网络设备tun0

记住这两个地址 inet addr:10.2.2.10 P-t-P:10.2.2.9 待会要用到

2 安装路由软件

下一步就是安装两个软件hostapd isc-dhcp-server

1) AP热点 hostapd 服务

刚开始的时候可以不加密直接使用默认配置就行 只需要修改下 ssid 和channel

注意: 默认是不加密的连接,建议等你完全测试成功了再修改为wpa加密的(配置文件中有各种模版)

2) ip地址自动分配 dhcpd服务

注意:

  1. 配置文件中的网段,子网掩码,以及网关要和给wlan0设置的静态ip【相对应】wlan0就是这个网段的网关)
  2. dns目前最好是配置成google的dns。因为国内的在根上都被污染了, google的dns走vpn的话没问题不会被污染,相应的解析速度也会变慢

(还有一种解决办法就是修改hosts,但是这个太麻烦,国外大网站不止一个域名,ip地址也是多个,收集这些信息也挺麻烦,相对来说收集国外网站ip段来说还是容易的)

3) 全部配置完毕后 ,启动服务

or

hostapd -ddK /etc/hostapd.conf #方便查看调试信息

4. 连接测试

现在你拿出手机搜索一下无线信号 有没有 [test_ap] 然后连接上试试。

若能成功连接并且获取ip,则表明你的pi无线路由器了

但是现在你得到手机还不能上网
需要设置一下NAT转发,即把wlan0上的网络连接转发到eth0上面通过有线来上网

3. 路由转发

———-分割线下面这些 觉得麻烦的可以不看,我在后面提供了一个脚本 不过最好还是看一下,有助于理解————-

  • 1)
    将192.168.10.0/24 这个网段的流量转发到 eth0上
    注意:192.168.2.11 是eth0的ip

    目前位置,手机连上无线后应该就能上网了,但访问国外网站还是不行的
  • 2)

    下面事例中我用8.8.8.8 代指国外ip ,你可以任意修改成“任意国外ip地址”

    将192.168.10.0/24 并且是去往8.8.8.8(任意国外ip地址) 的流量通过 10.2.2.10转发出去

  • 3)
    注意:目前默认的网关仍然是eth0 192.168.2.1
    看一下下面的路由表 默认是从 192.168.2.1出去的

    所以我们要添加一个路由项 (10.2.2.9 就是上面tun0 p-t-p 那一项,我的理解就是vpn的虚拟网关)。
    把去往8.8.8.8的流量路由到vpn上面去,不走原来的路线了

    用traceroute命令可以看到 现在走的是vpn

    若你只设置8.8.8.8的路由而不设置该ip的NAT转发,在pi上没有什么问题,会按照你的设置自动选择线路

    但是无线网络下面的终端(手机等)还是只能访问国内的ip地址 你设置的“国外ip”将不能访问(假如原来能访问的话hehe)

    总的来说 路由规则,NAT转发缺一不可

    vpn

  • 4)
    现在国外的网站能访问了,我们再把第一步在重复一遍 设置默认转发规则
    *注意:这一步一定要放到最后执行 *iptables规则就像一个筛子 第一层被挡住以后就不会往下走了

—————————–结束——————————–

我写了个脚本,python写的(shell不是很熟悉)

可以把一些网段自动转换称shell脚本 已经传到了 git@osc 上面

你可以 用git检出一份

或者直接下载zip压缩包

check.py 检查你前几步的设置是否有效
若你用的是openvpn 一般不需要修改,直接运行即可

安照提示运行上述命令

然后执行

以后若ip信息都没有变化的话 ,直接运行如下命令即可

最后

  1. route表是我从网上搜集的,只有几个常用的网段,不是很全。
  2. 上述过程我检查了几遍,但难免有疏漏的地方。若您发现请指正

原文地址

linux下多个终端命令历史记录保存

在此之前我一直以为linux下使用screen 或者tmux,等终端复用工具的话,命令历史是不会保存的。

可是事实是会保存到~/.bash_history 文件中去,只是历史记录并不是实时保存,只有在当前(session1)回话结束之后(执行了exit命令后) bash才会把历史记录写入到.bash_history文件中。即使已经写入到了.bash_history中,假如某个回话(session2)在写入之前就已经开启了,那么这个回话(session2)中的历史记录并不会实时刷新,也就是说你执行一遍history 打印出来的命令并没有 (session1)中的历史命令

做个测试

首先新建两个回话

进入session1

在进入session2

执行history 从第2001 行开始 都是不一样的

再次进入session1 并退出 新建session3 执行history命令(由于history记录数的限制,只能存储2000条历史记录,所以行数发生了变化)第1999行为在session1中执行的命令

进入session2(可以看到没有发生变化)

 若想多个回话之间实时共享历史记录,可以试试下面这种方法

~/.bashrc 或 ~/.bash_profile 文件中:
shopt -s histappend
PROMPT_COMMAND=’history -a’

 

这个是在网上搜到的,我没试因为我觉得还是分开的好些 一般建立多个回话是有多个任务要进行
要是历史记录共享的话就有些乱了