<!DOCTYPE HTML>
<html>
<head>
  <meta charset="utf-8">
  
  <title>北落师门 | 山有木兮木有枝，心悦君兮君不知</title>
  <meta name="author" content="Hong Zhang">
  
  

  <meta id="viewport" name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no, minimal-ui">
  <meta name="apple-mobile-web-app-capable" content="yes">
  <meta name="apple-mobile-web-app-status-bar-style" content="black">

  
  <meta property="og:site_name" content="北落师门"/>

  
    <meta property="og:image" content="undefined"/>
  

  <link href="/favicon.ico" rel="icon">
  <link rel="alternate" href="/atom.xml" title="北落师门" type="application/atom+xml">
  <link rel="stylesheet" href="/css/style.css" media="screen" type="text/css">
</head>


<body>
<div id="page" class="site">
  <div id="primary" class="content-area">

    <header id="header" class="inner"><div class="site-branding">
  <h1 class="site-title">
    <a href="/">北落师门</a>
  </h1>
  <p class="site-description">山有木兮木有枝，心悦君兮君不知</p>
</div>
<nav id="site-navigation" class="main-navigation" role="navigation">
  <ul>
    
      <li><a href="/">主页</a></li>
    
      <li><a href="/about-me/">关于我</a></li>
    
      <li><a href="/archives/">归档</a></li>
    
      <li><a href="/tags/">标签</a></li>
    
  </ul>
</nav></header>

    <article id="content" class="site-content">
      <main id="main" class="site-main posts-loop" role="main">
        
  <article class="post article">

  
  
    <h3 class="article-title"><a href="/2015/12/27/rebuild-from-srpm-on-centos-7/"><span>在centOS 7上面，从源码包重新编译软件包</span></a></h3>
  


  <div class="article-top-meta">
    <span class="posted-on">
      <a href="/2015/12/27/rebuild-from-srpm-on-centos-7/" rel="bookmark">
        <time class="entry-date published" datetime="2015-12-27T03:32:36.000Z">
          2015-12-27
        </time>
      </a>
    </span>
  </div>


  

  <div class="article-content">
    <div class="entry">
      
        <p>众所周知，ocserv需要重新编译才能支持比较详细的路由设置。这里简单总结一下如何在centOS 7 上面，从srpm出发，重新编译RPM包。</p>
<p>基本参考的资料就是官方的构建环境搭建指南和RPM重构指南：<br><a href="https://wiki.centos.org/HowTos/SetupRpmBuildEnvironment" target="_blank" rel="external">https://wiki.centos.org/HowTos/SetupRpmBuildEnvironment</a><br><a href="https://wiki.centos.org/HowTos/RebuildSRPM" target="_blank" rel="external">https://wiki.centos.org/HowTos/RebuildSRPM</a></p>
<h1 id="搭建构建环境">搭建构建环境</h1><ol>
<li>首先安装必备的软件包：</li>
</ol>
<p>yum install rpm-build redhat-rpm-config make gcc</p>
<ol>
<li>建立相应的用户，并切换到相应用户：</li>
</ol>
<p>user add mockbuild<br>su mockbuild</p>
<p>需要注意的是，官方建议不使用root账户来进行编译，而看起来EPEL默认的编译用户是mockbuild，上一步建立任意非root账户其实也可以但是可能会在安装srpm的时候遇到类似于下面的警告：</p>
<p>warning: user mockbuild does not exist - using root<br>warning: group mockbuild does not exist - using root</p>
<p>从个人实践的情况来看，似乎上面的警告也不会影响最后的编译，所以看你自己咯。</p>
<ol>
<li>建立相应的文件夹：</li>
</ol>
<p>mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}</p>
<ol>
<li>设定RPM build变量：</li>
</ol>
<p>echo ‘%_topdir %(echo $HOME)/rpmbuild’ &gt; ~/.rpmmacros</p>
<h1 id="取得源代码包进行重编译">取得源代码包进行重编译</h1><p>以epel为例，可以从这里取得对应的SRPM：<br><a href="https://dl.fedoraproject.org/pub/epel/7/SRPMS/" target="_blank" rel="external">https://dl.fedoraproject.org/pub/epel/7/SRPMS/</a></p>
<p>将对应的SRPM下载下来，然后使用rpm进行安装：</p>
<p>rpm -i /path/to/the/rpm</p>
<p>相关的文件会被解压到上一步新建的文件夹。</p>
<p>以ocserv为例，我们需要更改源码包中的vpn.h。所以需要先从SOURCES目录下的ocserv-0.10.8.tar.xz解压出源码，修改vpn.h以后打包回去：</p>
<p>cd SOURCES<br>tar -Jxf ocserv-0.10.8.tar.xz<br>rm ocserv-0.10.8.tar.xz<br>tar -Jcf ocserv-0.10.8.tar.xz ocserv-0.10.8/</p>
<p>然后重新编译rpm包：</p>
<p>rpmbuild -ba SPECS/ocserv.spec</p>
<p>然后在RPMS下就会生成对应的rpm包了。</p>

      
    </div>
    <footer class="article-footer">
        <div class="article-meta pull-left">
          <span class="post-categories">
            <i class="icon-categories"></i>
            
          </span>
          <span class="post-tags">
            <i class="icon-tags"></i>
            
  

  <a href="/tags/Centos-7/">Centos 7</a>, <a href="/tags/源码包/">源码包</a>, <a href="/tags/编译/">编译</a>


          </span>
        </div>
        
    </footer>
  </div>
</article>


  <article class="post article">

  
  
    <h3 class="article-title"><a href="/2014/09/04/a-medical-malpractice-experience/"><span>亲身经历某地区医院的医疗事故，说一下看法和不满。</span></a></h3>
  


  <div class="article-top-meta">
    <span class="posted-on">
      <a href="/2014/09/04/a-medical-malpractice-experience/" rel="bookmark">
        <time class="entry-date published" datetime="2014-09-04T09:46:24.000Z">
          2014-09-04
        </time>
      </a>
    </span>
  </div>


  

  <div class="article-content">
    <div class="entry">
      
        <p>我希望能尽量以比较客观的态度来谈论这件事情。</p>
<h2 id="事情经过：">事情经过：</h2><p>我妈妈因为子宫肌瘤在8月4号，于本区的地区中心医院妇科，也是本区唯一的三甲医院完成了子宫肌瘤切除手术。完成手术后，主治医生把纱布遗留在我妈妈体内（似乎是子宫附近，非医疗专业不是很确定），造成8月4号至9月1号期间我妈妈一直有恶臭分泌物，浑身无力（严重到吃饭的时候没有力气把碗端起来，只能拿的动筷子，期间几乎没法上台阶。），且浑身疼痛。反正我在家那两天休息的很差，身体状况非常糟糕，而且据说我走以后情况还继续恶化。</p>
<p>因为身体不适，我妈妈在8月21日到该医院复查，该医院没发现这个问题，而是给我妈开了治疗胃疼的药。</p>
<p>于9月1日，我妈妈在另外一个医院被发现纱布，并取出，现在恢复已经非常良好。（所以我才能有闲暇在这里发这个博文）。</p>
<p>我要说一下的是，在手术前，我已经咨询了我一个同学和一个师姐得到的答复是这是一个小手术，而且某医院是本区最好的医院啊。所以才放心的让我妈妈在该医院完成手术，根本没有任何会出现这种事故的心理准备。</p>
<h2 id="对该院的看法和不满">对该院的看法和不满</h2><ol>
<li><p><strong>首先声明，我对该主刀医师并没有特别大意见。</strong>作为一个搞化学的，我很明白实验多了都会有误差，手术多了肯定可能出现误差，难以避免。而且出了这个事故我相信她也并不好过，之后也不会好过。</p>
</li>
<li><p><strong>我认为该院至少手术管理流程上有一定问题。</strong>因为三块纱布并不是小东西，如果手术流程规范，我认为应该能尽量避免的。</p>
</li>
<li><p><strong>我认为要么该院复查流程不够规范，要么是主管医师责任心不够。</strong> 该院在我妈明确表明是手术后不适，恢复时间远超于预期（据说做了这个手术的阿姨说她在7天左右基本恢复，复查时我妈妈距离手术已经半个多月），病情非常严重的情况下（参看前面），且复查时通过B超发现子宫附件有大块阴影，报告医师后，被简单的处理成了子宫肌瘤未切除完（我妈妈在手术室呆了3个多小时，因为血糖升高，血钠失衡被提前中断手术，未完全完成手术）。</p>
</li>
<li><p><strong>该医院某些医生态度非常有问题。</strong>21号我妈去医院复查时，由于我在自动挂号机上挂的号，而那台挂号机因为故障没有吐出回执。在大厅询问导医MM得到没有影响的明确答复后到该院319门诊检查。因为妇科的原因，我没法陪同。结果我妈妈因为没有挂号的回执（和没有按要求排队？这个是我猜测的）被该医生呵斥了出来（同样是猜测，非常抱歉）。但是换成大家。看到一个刚才上楼梯都没力气，两楼走了10多20分钟路的人，而且是亲身母亲，一而再再二三的从诊室委屈的走出来是什么感觉！总之我当时非常生气！</p>
</li>
</ol>
<p>在我有点生气的冲进去以后，询问之后该医生不耐烦的说，没看到我很忙么（那里确实很多人，但是都是年轻女人啊！！），不会好好排队么？</p>
<p>我承认，我母亲确实是没有按规矩，但是您作为一个医师，不能好言提醒让她排队吗？态度不能稍微好一点么？至少指出是什么问题我们好解决啊！</p>
<ol>
<li><strong>该医院某领导沟通能力极差。</strong>在确认是该医院引起的医疗事故后，我陪同我父母到该医院协商赔偿的事情。妇科某吴姓主任接待的我们。某些言论让我作为一个家属非常不舒服。</li>
</ol>
<p>首先，在主刀医师在场，且已经默认的情况下，该主任大量强调：1. 这个手术几乎不可能会用到纱布，所以几乎不可能会出现纱布遗留（我对这段的理解是，<strong>我不是很相信你们，你们是不是搞错了？或者不会是要来讹我们钱吧</strong>）。2. 我们医院也感到抱歉，但是这种事情我们医院经常遇到（反正我对这段的理解是<strong>所以我抱歉的也很有限度。</strong>）在我们没有提起前，绝口不谈赔偿的事情。我觉得我们应该佩服中国某些人打太极的能力，就这么一些话，这个主任说了1个小时左右（这个时间回忆得到，可能受主观影响，并不精确）</p>
<p>其次，在讨论赔偿的时候。我因为没有对应的经验（我祝福看博客的各位都不要有），一早在家根据《医疗事故处理条例》草拟了一份大概的赔偿协议，因为相关知识不足，把我母亲和父亲的误工费，陪护费基准定为了非私营企业城镇居民平均工资，是偏高的。合计约8000的样子（严格按法律条款算下来我父亲没有陪护费，大约2000多的样子）。但是后面综合实际情况：我母亲延缓一个月愈合，我父亲额外的一个月陪护，和相应的对我母亲造成的痛苦。我个人认为这个金额是协商应该得到的金额。</p>
<p>而该主任在我拿出这个单子以后，一直强调：1. <strong>根据法律条款，我父亲不应该得到陪护费。医院可以考虑考虑（“但是我就是不很想给”）</strong>。2. <strong>根据法律条款，我父亲母亲的这两个基准都高了，是没法商量的。</strong></p>
<p>我想说的是，根据法律条款，确实不应该付这些钱（顺便说下，这个《医疗事故处理条例》目前意见也很大，见这里： <a href="http://www.infzm.com/content/49104" target="_blank" rel="external">《医疗事故处理条例》当休矣</a>                  ），但是协商的目的是什么，是想根据道义得到补偿啊。是我们已经认为某医院能够吸取教训减少这类事情的发生，避免对医院造成其他影响啊。既然没有人情味，要按法律走，还何必协商呢？</p>
<p>最后，该医生的其他言论让我回想起来，总结就是你们大约是乡下人想来闹一闹要点钱，我这种经过大风大浪的人怎么会让你们得逞（原话：我吴某人当了20多年主任，在重庆地区也是有头有脸的人，经常处理这类事故）。注：该段主观感受很重，请自行选择忽略。</p>
<p>以上，所以我认为现在医闹这么严重，某些医生也是需要负起责任的。</p>

      
    </div>
    <footer class="article-footer">
        <div class="article-meta pull-left">
          <span class="post-categories">
            <i class="icon-categories"></i>
            
          </span>
          <span class="post-tags">
            <i class="icon-tags"></i>
            
  

  <a href="/tags/医疗事故/">医疗事故</a>, <a href="/tags/生活/">生活</a>


          </span>
        </div>
        
    </footer>
  </div>
</article>


  <article class="post article">

  
  
    <h3 class="article-title"><a href="/2014/07/08/use-ipset-with-shadowsocks-on-openwrt/"><span>使用ipset让openwrt上的shadowsocks更智能的重定向流量</span></a></h3>
  


  <div class="article-top-meta">
    <span class="posted-on">
      <a href="/2014/07/08/use-ipset-with-shadowsocks-on-openwrt/" rel="bookmark">
        <time class="entry-date published" datetime="2014-07-08T07:55:59.000Z">
          2014-07-08
        </time>
      </a>
    </span>
  </div>


  

  <div class="article-content">
    <div class="entry">
      
        <p>之前看到有人分享通过dnsmasq的ipset功能简化流量重定向试了下发现很不错。这里分享一下。</p>
<p>使用ipset的主要优势在于直接将所有被污染的域名解析结果交给ipset，不需要动态维护IP列表，在路由上更智能。主要适用于访问和谐站点较少，或者较固定的人群。</p>
<p>本文默认为ar71xx平台，并使用openwrt trunk版本，请按照您的需要自行更改。</p>
<p>本文包括三个部分：</p>
<ol>
<li>安装相应软件包</li>
<li>配置dnsmasq和ipset</li>
<li>【可选】使用pdnsd获取更优的解析结果。</li>
<li>DEBUG</li>
</ol>
<h2 id="一、安装需要的软件包">一、安装需要的软件包</h2><p>需要从外部下载以后安装的：<br>shadowsocks：推荐从<a href="http://sourceforge.net/projects/openwrt-dist/files/shadowsocks-libev/" target="_blank" rel="external">http://sourceforge.net/projects/openwrt-dist/files/shadowsocks-libev/</a> 下载。<br>·<br>我的做法是下载下来在本地用nginx建一个http服务器，然后在路由器上去wget。另外的普遍做法是用winscp直接上传到路由器，共参考选择。</p>
<p>开始安装：</p>
<pre><code>opkg <span class="operator"><span class="keyword">update</span> //安装前必须更新包数据库缓存。
opkg <span class="keyword">install</span> ipset iptables-<span class="keyword">mod</span>-nat-extra
opkg <span class="keyword">install</span> dnsmasq-<span class="keyword">full</span> <span class="comment">--force-overwrite //官方提供的dnsmasq-full提供了ipset相关 的功能，需要加后面的参数进行强制覆盖安装。</span></span>
</code></pre><p><strong>某些</strong> 版本ipset安装后会报类似下面的错误：</p>
<pre><code><span class="string">kmod:</span> failed to insert <span class="regexp">/lib/</span>modules<span class="regexp">/3.10.44/</span>ip_set.ko
<span class="string">kmod:</span> failed to insert <span class="regexp">/lib/</span>modules<span class="regexp">/3.10.44/</span>ip_set_bitmap_ip.ko
<span class="string">kmod:</span> failed to insert <span class="regexp">/lib/</span>modules<span class="regexp">/3.10.44/</span>ip_set_bitmap_ipmac.ko
<span class="string">kmod:</span> failed to insert <span class="regexp">/lib/</span>modules<span class="regexp">/3.10.44/</span>ip_set_bitmap_port.ko
<span class="string">kmod:</span> failed to insert <span class="regexp">/lib/</span>modules<span class="regexp">/3.10.44/</span>ip_set_hash_ip.ko
<span class="string">kmod:</span> failed to insert <span class="regexp">/lib/</span>modules<span class="regexp">/3.10.44/</span>ip_set_hash_ipport.ko
<span class="string">kmod:</span> failed to insert <span class="regexp">/lib/</span>modules<span class="regexp">/3.10.44/</span>ip_set_hash_ipportip.ko
<span class="string">kmod:</span> failed to insert <span class="regexp">/lib/</span>modules<span class="regexp">/3.10.44/</span>ip_set_hash_ipportnet.ko
<span class="string">kmod:</span> failed to insert <span class="regexp">/lib/</span>modules<span class="regexp">/3.10.44/</span>ip_set_hash_net.ko
<span class="string">kmod:</span> failed to insert <span class="regexp">/lib/</span>modules<span class="regexp">/3.10.44/</span>ip_set_hash_netiface.ko
<span class="string">kmod:</span> failed to insert <span class="regexp">/lib/</span>modules<span class="regexp">/3.10.44/</span>ip_set_hash_netport.ko
<span class="string">kmod:</span> failed to insert <span class="regexp">/lib/</span>modules<span class="regexp">/3.10.44/</span>ip_set_list_set.ko
<span class="string">kmod:</span> failed to insert <span class="regexp">/lib/</span>modules<span class="regexp">/3.10.44/</span>xt_set.ko
</code></pre><p>需要重新启动以后ipset 才能正常使用。</p>
<p>这里假设你已经下好上文中的dnsmasq和shadowsocks并且进入了存放这两个文件的文件夹。</p>
<p>安装shadowsocks：</p>
<pre><code><span class="tag">opkg</span> <span class="tag">install</span> <span class="tag">shadowsocks-libev-polarssl_1</span><span class="class">.4</span><span class="class">.5_ar71xx</span><span class="class">.ipk</span>
</code></pre><p>新版本不需要处理libpolarssl的问题，老版本shadowsocks编译的时候链接的是libpolarssl.so.5，所以我们需要做一个libpolarssl.so.5软链接出来，否则shadowsocks不能启动且不会有任何报错。</p>
<pre><code>ln -s /usr/lib/libpolarssl<span class="class">.so</span>  /usr/lib/libpolarssl<span class="class">.so</span>.<span class="number">5</span>
</code></pre><p>同时你需要自行编辑下/etc/shadowsocks.json，把正确的shadowsocks服务器信息填进去。</p>
<p>另外因为我们需要用到的是ss-redir而不是ss-local。所以请用编辑器打开/etc/init.d/shadowsocks 然后把里面所有的ss-local全部换成ss-redir（一共两处），然后：</p>
<pre><code><span class="regexp">/etc/i</span>nit.d<span class="regexp">/shadowsocks enable /</span><span class="regexp">/让shadowsocks自动启动</span>
</code></pre><p>考虑到之前ipset的问题。到这里我们先重启一下吧，咱们重启以后见 丷丷。</p>
<h2 id="二、配置dnsmasq和ipset">二、配置dnsmasq和ipset</h2><p>我们先用ipset创建一个set，这里我创建的set名字为setmefree（没有逼格啊没有逼格）,然后将这个set中所有IP均转发到shadowsocks（这里本机的shadowsocks监听的是默认的1080端口）。<br>建议将下面的命令写入 /etc/rc.local 。每次开机自动运行。</p>
<pre><code>ipset -<span class="keyword">N</span> setmefree iphash
iptables -t nat -A PREROUTING -p tcp -<span class="keyword">m</span> <span class="keyword">set</span> --match-<span class="keyword">set</span> setmefree dst -j REDIRECT --to-port 1080
</code></pre><p>设置 dnsmasq 对某些域名使用opendns进行解析并且加入setmefree这个set：<br>为了保持配置文件整洁，建议在 /etc/dnsmasq.conf 最后加入：</p>
<pre><code><span class="keyword">conf</span>-<span class="keyword">dir</span>=/etc/dnsmasq.<span class="literal">d</span>
</code></pre><p>然后新建目录 /etc/dnsmasq.d ，在里面加入一个 conf，名字任选。譬如 /etc/dnsmasq.d/fuckgfw.conf , 下面是我的文件内容，你可以按自己需要整理自己的：</p>
<h1 id="Google_and_Youtube">Google and Youtube</h1><p>server=/.google.com/208.67.222.222#443<br>server=/.google.com.hk/208.67.222.222#443<br>server=/.gstatic.com/208.67.222.222#443<br>server=/.ggpht.com/208.67.222.222#443<br>server=/.google.com/208.67.222.222#443<br>server=/.google.com.hk/208.67.222.222#443<br>server=/.gstatic.com/208.67.222.222#443<br>server=/.ggpht.com/208.67.222.222#443<br>server=/.googleusercontent.com/208.67.222.222#443<br>server=/.appspot.com/208.67.222.222#443<br>server=/.googlecode.com/208.67.222.222#443<br>server=/.googleapis.com/208.67.222.222#443<br>server=/.gmail.com/208.67.222.222#443<br>server=/.google-analytics.com/208.67.222.222#443<br>server=/.youtube.com/208.67.222.222#443<br>server=/.googlevideo.com/208.67.222.222#443<br>server=/.youtube-nocookie.com/208.67.222.222#443<br>server=/.ytimg.com/208.67.222.222#443<br>server=/.blogspot.com/208.67.222.222#443<br>server=/.blogger.com/208.67.222.222#443<br>server=/.google.co.jp/208.67.222.222#443<br>server=/.google.co.uk/208.67.222.222#443</p>
<h1 id="FaceBook">FaceBook</h1><p>server=/.facebook.com/208.67.222.222#443<br>server=/.thefacebook.com/208.67.222.222#443<br>server=/.facebook.net/208.67.222.222#443<br>server=/.fbcdn.net/208.67.222.222#443<br>server=/.akamaihd.net/208.67.222.222#443</p>
<h1 id="Twitter">Twitter</h1><p>server=/.twitter.com/208.67.222.222#443<br>server=/.t.co/208.67.222.222#443<br>server=/.bitly.com/208.67.222.222#443<br>server=/.twimg.com/208.67.222.222#443<br>server=/.tinypic.com/208.67.222.222#443<br>server=/.yfrog.com/208.67.222.222#443</p>
<h1 id="Dropbox">Dropbox</h1><p>server=/.dropbox.com/208.67.222.222#443</p>
<h1 id="1024">1024</h1><p>server=/.t66y.com/208.67.222.222#443</p>
<h1 id="shadowsocks-org">shadowsocks.org</h1><p>server=/.shadowsocks.org/208.67.222.222#443</p>
<h1 id="btdigg">btdigg</h1><p>server=/.btdigg.org/208.67.222.222#443</p>
<h1 id="sf-net">sf.net</h1><p>server=/.sourceforge.net/208.67.222.222#443</p>
<h1 id="feedly">feedly</h1><p>server=/.feedly.com/208.67.222.222#443</p>
<h1 id="github_and_fastly">github and fastly</h1><p>server=/.github.com/208.67.222.222#443<br>server=/.fastly.com/208.67.222.222#443</p>
<h1 id="wikipedia">wikipedia</h1><p>server=/.wikipedia.org/208.67.222.222#443<br>server=/.wikimedia.org/208.67.222.222#443<br>server=/.wiktionary.org/208.67.222.222#443</p>
<h1 id="xda">xda</h1><p>server=/.xda-developers.com/208.67.222.222#443</p>
<h1 id="Here_Comes_The_ipset">Here Comes The ipset</h1><h1 id="Google_and_Youtube-1">Google and Youtube</h1><p>ipset=/.google.com/setmefree<br>ipset=/.google.com.hk/setmefree<br>ipset=/.gstatic.com/setmefree<br>ipset=/.ggpht.com/setmefree<br>ipset=/.googleusercontent.com/setmefree<br>ipset=/.appspot.com/setmefree<br>ipset=/.googlecode.com/setmefree<br>ipset=/.googleapis.com/setmefree<br>ipset=/.gmail.com/setmefree<br>ipset=/.google-analytics.com/setmefree<br>ipset=/.youtube.com/setmefree<br>ipset=/.googlevideo.com/setmefree<br>ipset=/.youtube-nocookie.com/setmefree<br>ipset=/.ytimg.com/setmefree<br>ipset=/.blogspot.com/setmefree<br>ipset=/.blogger.com/setmefree<br>ipset=/.google.co.jp/setmefree<br>ipset=/.google.co.uk/setmefree</p>
<h1 id="FaceBook-1">FaceBook</h1><p>ipset=/.facebook.com/setmefree<br>ipset=/.thefacebook.com/setmefree<br>ipset=/.facebook.net/setmefree<br>ipset=/.fbcdn.net/setmefree<br>ipset=/.akamaihd.net/setmefree</p>
<h1 id="Twitter-1">Twitter</h1><p>ipset=/.twitter.com/setmefree<br>ipset=/.t.co/setmefree<br>ipset=/.bitly.com/setmefree<br>ipset=/.twimg.com/setmefree<br>ipset=/.tinypic.com/setmefree<br>ipset=/.yfrog.com/setmefree</p>
<h1 id="Dropbox-1">Dropbox</h1><p>ipset=/.dropbox.com/setmefree</p>
<h1 id="1024-1">1024</h1><p>ipset=/.t66y.com/setmefree</p>
<h1 id="shadowsocks-org-1">shadowsocks.org</h1><p>ipset=/.shadowsocks.org/setmefree</p>
<h1 id="btdigg-1">btdigg</h1><p>ipset=/.btdigg.org/setmefree</p>
<h1 id="sf-net-1">sf.net</h1><p>ipset=/.sourceforge.net/setmefree</p>
<h1 id="feedly-1">feedly</h1><p>ipset=/.feedly.com/setmefree</p>
<h1 id="github&amp;fastly">github&amp;fastly</h1><p>ipset=/.github.com/setmefree<br>ipset=/.fastly.com/setmefree</p>
<h1 id="wikipedia-1">wikipedia</h1><p>ipset=/.wikipedia.org/setmefree<br>ipset=/.wikimedia.org/setmefree<br>ipset=/.wiktionary.org/setmefree</p>
<h1 id="xda-1">xda</h1><p>ipset=/.xda-developers.com/setmefree</p>
<p>注意：</p>
<ol>
<li>目前公共DNS有opendns监听非标准端口（443和5353），你也可以到这里查看由opennic提供的DNS：<a href="http://meo.ws/dnsrec.php" target="_blank" rel="external">http://meo.ws/dnsrec.php</a> （均监听以下端口54, 443, 1053, 1194, 5353, 8080，27015），当然你也可以自己建DNS服务器。关于DNS优化的讨论请参考下一节。</li>
<li>每条记录都需要跟一条ipset设置，不要忘了。</li>
</ol>
<p>然后重启 dnsmasq：</p>
<pre><code><span class="regexp">/etc/i</span>nit.d<span class="regexp">/dnsmasq restart</span>
</code></pre><p>或者直接重新启动，顺便测试rc.local中的命令有没有成功运行。</p>
<h2 id="三、【可选】使用pdnsd获取更优的解析结果。">三、【可选】使用pdnsd获取更优的解析结果。</h2><p>注意：通过上面的配置您的openwrt穿墙已经应该正常了，下面仅作优化方面的讨论。</p>
<p>由于opendns是根据来源IP给出结果，导致的结果是直接在路由器上查询返回的是对应中国的IP，以youtube为例：</p>
<pre><code>dig www<span class="class">.youtube</span><span class="class">.com</span> @<span class="number">208.67</span>.<span class="number">222.222</span> -<span class="tag">p</span> <span class="number">443</span>
</code></pre><p>给出的其中一个结果为：173.194.72.102，在VPS上ping（你应该能理解，所有过shadowsocks的流量事实上是由VPS中转的，所以我们测试的是VPS与该IP的连接情况）约<strong>33ms</strong>。而换用VPS当地的DNS可以将延迟降到<strong>1.45ms</strong>左右。个人认为还是很有意义的。当然其实如果不怕麻烦自建DNS是最好啦。</p>
<p>关于pdnsd的配置请参考<a href="http://hong.im/2014/03/16/configure-an-openwrt-based-router-to-use-shadowsocks-and-redirect-foreign-traffic/">上一篇</a>。</p>
<h2 id="四、DEBUG">四、DEBUG</h2><ol>
<li><p>通过下面的命令查看set中的IP，这样可以确定解析是否正常，并且查看某网站是否正确的被加到了ipset：</p>
<p> ipset list setmefree</p>
</li>
</ol>
<p>通过下面的命令可以清理掉set中所有ip。更多的ipset用法请查看<em>ipset help</em></p>
<pre><code>ipset <span class="keyword">flush</span> setmefree
</code></pre><ol>
<li><p>以daemon模式运行shadowsocks前建议先试一下确保配置文件无误：</p>
<p> ss-redir -c /etc/shadowsocks.json</p>
</li>
</ol>
<h2 id="更新记录：">更新记录：</h2><p>2015年8月9日 修正一些说法，更新DNS配置文件。</p>

      
    </div>
    <footer class="article-footer">
        <div class="article-meta pull-left">
          <span class="post-categories">
            <i class="icon-categories"></i>
            
          </span>
          <span class="post-tags">
            <i class="icon-tags"></i>
            
  

  <a href="/tags/ipset/">ipset</a>, <a href="/tags/openwrt/">openwrt</a>, <a href="/tags/shadowsocks/">shadowsocks</a>


          </span>
        </div>
        
    </footer>
  </div>
</article>


  <article class="post article">

  
  
    <h3 class="article-title"><a href="/2014/03/16/configure-an-openwrt-based-router-to-use-shadowsocks-and-redirect-foreign-traffic/"><span>配置一台基于openWRT的路由器使用shadowsocks并智能穿墙</span></a></h3>
  


  <div class="article-top-meta">
    <span class="posted-on">
      <a href="/2014/03/16/configure-an-openwrt-based-router-to-use-shadowsocks-and-redirect-foreign-traffic/" rel="bookmark">
        <time class="entry-date published" datetime="2014-03-16T13:07:48.000Z">
          2014-03-16
        </time>
      </a>
    </span>
  </div>


  

  <div class="article-content">
    <div class="entry">
      
        <p>本文开始写作时中使用的路由器为TP-LINK WR841N（D）V7（with openwrt 12.09 稳定版），到这次更新时已经换为了水星 4530R （with openwrt trunk）</p>
<p>在路由器上使用shadowsocks的<strong>优势</strong>：</p>
<ol>
<li>效率比较高，在我的不严谨测试中效率比ipsec和pptp都略高。</li>
<li>目前为止比较稳定（较少受到干扰）而且比较安全。</li>
<li>服务器端和客户端的配置都相对来说比较简单，不容易出错。</li>
<li>路由器下面的所有设备都可以<strong>0配置自动穿墙</strong>，你懂的。</li>
<li>相比goagent（基本阵亡？默哀）而言，要求的包都很小。</li>
</ol>
<p><strong>劣势</strong></p>
<ol>
<li>暂时没有发现。（是的。本来的问题我貌似解决了。）</li>
</ol>
<p>本文的基本目的是在openwrt上使用pdnsd通过tcp查询规避DNS污染，通过iptables转发到端口的功能转发特定流量给跑在路由器上的shadowsocks来访问某些特定IP段达到一定程度无视某墙的存在的目的。</p>
<p>本文分为三个部分：</p>
<ol>
<li><strong>相关包的安装和shadowsocks的配置</strong></li>
<li><strong>pdnsd的配置</strong></li>
<li><strong>使用iptables对流量进行重定向</strong></li>
</ol>
<h2 id="在openwrt上安装相关的包并配置shadowsocks">在openwrt上安装相关的包并配置shadowsocks</h2><p>其中shadowsocks我们使用shadowsocks-libev-polarssl（openssl的lib比较大，塞不下……），推荐从这里获取：<br><a href="http://sourceforge.net/projects/openwrt-dist/files/shadowsocks-libev/" target="_blank" rel="external">http://sourceforge.net/projects/openwrt-dist/files/shadowsocks-libev/</a></p>
<p>然后在路由器端刷新opkg缓存包并安装shadowsocks：</p>
<pre><code><span class="tag">opkg</span> <span class="tag">update</span>
<span class="tag">opkg</span> <span class="tag">install</span> <span class="tag">shadowsocks-libev-polarssl_1</span><span class="class">.4</span><span class="class">.5_ar71xx</span><span class="class">.ipk</span>
</code></pre><p>我们还需要安装额外的包，其中我们使用<em>pdnsd</em>（如果后面直接配置dnsmasq转发请求给opendns则不需要）来净化部分国外域名解析，用<em>iptables-mod-nat-extra</em>实现iptables流量转发到端口的功能：</p>
<pre><code>opkg <span class="operator"><span class="keyword">update</span>
opkg <span class="keyword">install</span> pdnsd  
opkg <span class="keyword">install</span> pdnsd  iptables-<span class="keyword">mod</span>-nat-extra</span>
</code></pre><p>我们需要编辑shadowsocks的配置信息 <em>/etc/config/shadowsocks.json</em>（新版默认的配置文件移动到了/etc/shadowsocks.json 不过在后面启动的时候指定就好了，无影响。）：<br>格式如下：</p>
<pre><code>{
    "<span class="attribute">server</span>":<span class="value"><span class="string">"[服务器IP地址]"</span></span>,
    "<span class="attribute">server_port</span>":<span class="value">[服务器端口]</span>,
    "<span class="attribute">local_port</span>":<span class="value">[本地端口,稍后iptables会用到]</span>,
    "<span class="attribute">password</span>":<span class="value"><span class="string">"[密码]"</span></span>,
    "<span class="attribute">timeout</span>":<span class="value"><span class="number">600</span></span>,
    "<span class="attribute">method</span>":<span class="value"><span class="string">"[加密方式]"</span>
</span>}
</code></pre><p>在12.09上shadowsocks会因为缺少libpolarssl.so.3而无法启动，我们可以使用ln“欺骗”一下shadowsocks：</p>
<p><em>注：我目前一切切换到trunk版本，不知道新版是否还存在这个BUG，请自行测试能否启动。</em></p>
<pre><code>ln -s /usr/lib/libpolarssl<span class="class">.so</span> /usr/lib/libpolarssl<span class="class">.so</span>.<span class="number">3</span>
</code></pre><h2 id="配置pdnsd对某些域名进行净化">配置pdnsd对某些域名进行净化</h2><p>我采用的基本思路是通过pdnsd使用TCP协议向国外的上级DNS查询而避过DNS污染，然后在本地提供一个1053端口的DNS供dnsmasq使用。如果全局使用pdnsd转发的国外DNS会导致国内某些网站或者服务访问较慢，不推荐。<br>另外一个思路是使用非标准端口查询，那么就可以不需要配置pdnsd，直接在dnsmasq配置中将相关域名查询请求转发给支持非标准端口的DNS就行了，目前已知的是opendns支持5353端口和443端口。（即在dnsmasq段配置将127.0.0.1#1053 替换为 208.67.222.222#5353 或 208.67.222.222#443 <strong>注意：未测试，仅理论分析</strong>）。</p>
<p><em>提醒一下：最近对Google的干扰已经全面升级，单纯解决DNS污染没法愉快的撸youtube了。</em></p>
<p>修改pdnsd的配置文件 <em>/etc/pdnsd.conf</em>：<br>注意关注中文注释部分，如果复制记得把中文注释删掉。。。其他部分如果您需要，再自行修改：</p>
<pre><code><span class="comment"># 这一段全局配置需要修改：</span>

global {
    <span class="comment"># debug = on;</span>
    <span class="variable">perm_cache=</span><span class="number">1024</span>;
    <span class="variable">cache_dir=</span><span class="string">"/var/pdnsd"</span>;
    <span class="variable">run_as=</span><span class="string">"nobody"</span>;
    <span class="variable">server_port =</span> <span class="number">1053</span>;    <span class="comment"># ！！！使用 1053 作为 dns 端口, 默认是 53，一定要修改否则会跟默认dnsmasq冲突</span>
    <span class="variable">server_ip =</span> <span class="number">127.0</span>.<span class="number">0.1</span>;  <span class="comment">#我们只需要处理本机转发的DNS查询，所以不需要更改</span>
    <span class="variable">status_ctl =</span> on;
    <span class="variable">query_method=</span>tcp_only; <span class="comment"># ！！！最重要的配置, 只使用 tcp 查询上级 dns</span>
    <span class="variable">min_ttl=</span><span class="number">15</span>m;
    <span class="variable">max_ttl=</span><span class="number">1</span>w;
    <span class="variable">timeout=</span><span class="number">10</span>;
}

<span class="comment">#……</span>

<span class="comment"># 自行增加下面这一段，pdnsd默认是没有提供上游DNS服务器的（默认配置文件中用各种注释方式把自带的注释掉了）：</span>

server {
    <span class="variable">label=</span> <span class="string">"googledns"</span>;           <span class="comment"># 这个label随便写</span>
    <span class="variable">ip =</span> <span class="number">8.8</span>.<span class="number">8.8</span>; <span class="comment"># 这里为上级 dns 的 ip 地址，要求必须支持TCP查询，相关说明见后文注解</span>
    <span class="variable">root_server =</span> on;        <span class="comment"># 设置为 on。</span>
    <span class="variable">uptest =</span> none;           <span class="comment"># 不去检测 dns 是否无效.</span>
}
        <span class="comment"># …… 后面不需要修改的就不贴出来了。</span>
</code></pre><p>注：DNS地址如果不愿意倒腾可以使用Google Public DNS。如果需要使用其他DNS，请参考：<a href="http://public-dns.tk/" target="_blank" rel="external">http://public-dns.tk/</a> ，为了配合后面的重定向，建议使用与VPS地区相同的DNS，譬如我现在使用的服务器在日本，这里的DNS同样使用日本的DNS，一定程度上可以提高连接速度。</p>
<p>启用pdnsd，并设置为开机启动：</p>
<pre><code><span class="regexp">/etc/</span>init.d/pdnsd enable
<span class="regexp">/etc/</span>init.d/pdnsd start
</code></pre><p>设置dnsmasq对特定域名使用本地的pdnsd进行解析：<br>为了保持配置文件整洁，建议在 <em>/etc/dnsmasq.conf</em> 最后加入：</p>
<pre><code><span class="keyword">conf</span>-<span class="keyword">dir</span>=/etc/dnsmasq.<span class="literal">d</span>
</code></pre><p>然后新建目录 <em>/etc/dnsmasq.d</em>  ，在里面加入一个conf，名字任选。譬如 <em>/etc/dnsmasq.d/fuckgfw.conf</em> ,下面是我的文件内容，你可以按自己需要整理自己的：</p>
<pre><code><span class="id">#Google</span> and Youtube
server=/<span class="class">.google</span><span class="class">.com</span>/<span class="number">127.0</span>.<span class="number">0.1</span><span class="hexcolor">#105</span>3
server=/<span class="class">.google</span><span class="class">.com</span><span class="class">.hk</span>/<span class="number">127.0</span>.<span class="number">0.1</span><span class="hexcolor">#105</span>3
server=/<span class="class">.gstatic</span><span class="class">.com</span>/<span class="number">127.0</span>.<span class="number">0.1</span><span class="hexcolor">#105</span>3
server=/<span class="class">.ggpht</span><span class="class">.com</span>/<span class="number">127.0</span>.<span class="number">0.1</span><span class="hexcolor">#105</span>3
server=/<span class="class">.googleusercontent</span><span class="class">.com</span>/<span class="number">127.0</span>.<span class="number">0.1</span><span class="hexcolor">#105</span>3
server=/<span class="class">.appspot</span><span class="class">.com</span>/<span class="number">127.0</span>.<span class="number">0.1</span><span class="hexcolor">#105</span>3
server=/<span class="class">.googlecode</span><span class="class">.com</span>/<span class="number">127.0</span>.<span class="number">0.1</span><span class="hexcolor">#105</span>3
server=/<span class="class">.googleapis</span><span class="class">.com</span>/<span class="number">127.0</span>.<span class="number">0.1</span><span class="hexcolor">#105</span>3
server=/<span class="class">.gmail</span><span class="class">.com</span>/<span class="number">127.0</span>.<span class="number">0.1</span><span class="hexcolor">#105</span>3
server=/<span class="class">.google-analytics</span><span class="class">.com</span>/<span class="number">127.0</span>.<span class="number">0.1</span><span class="hexcolor">#105</span>3
server=/<span class="class">.youtube</span><span class="class">.com</span>/<span class="number">127.0</span>.<span class="number">0.1</span><span class="hexcolor">#105</span>3
server=/<span class="class">.googlevideo</span><span class="class">.com</span>/<span class="number">127.0</span>.<span class="number">0.1</span><span class="hexcolor">#105</span>3
server=/<span class="class">.youtube-nocookie</span><span class="class">.com</span>/<span class="number">127.0</span>.<span class="number">0.1</span><span class="hexcolor">#105</span>3
server=/<span class="class">.ytimg</span><span class="class">.com</span>/<span class="number">127.0</span>.<span class="number">0.1</span><span class="hexcolor">#105</span>3
server=/<span class="class">.blogspot</span><span class="class">.com</span>/<span class="number">127.0</span>.<span class="number">0.1</span><span class="hexcolor">#105</span>3
server=/<span class="class">.blogger</span><span class="class">.com</span>/<span class="number">127.0</span>.<span class="number">0.1</span><span class="hexcolor">#105</span>3

<span class="hexcolor">#Fac</span>eBook
server=/<span class="class">.facebook</span><span class="class">.com</span>/<span class="number">127.0</span>.<span class="number">0.1</span><span class="hexcolor">#105</span>3
server=/<span class="class">.thefacebook</span><span class="class">.com</span>/<span class="number">127.0</span>.<span class="number">0.1</span><span class="hexcolor">#105</span>3
server=/<span class="class">.facebook</span><span class="class">.net</span>/<span class="number">127.0</span>.<span class="number">0.1</span><span class="hexcolor">#105</span>3
server=/<span class="class">.fbcdn</span><span class="class">.net</span>/<span class="number">127.0</span>.<span class="number">0.1</span><span class="hexcolor">#105</span>3
server=/<span class="class">.akamaihd</span><span class="class">.net</span>/<span class="number">127.0</span>.<span class="number">0.1</span><span class="hexcolor">#105</span>3

<span class="id">#Twitter</span>
server=/<span class="class">.twitter</span><span class="class">.com</span>/<span class="number">127.0</span>.<span class="number">0.1</span><span class="hexcolor">#105</span>3
server=/<span class="class">.t</span><span class="class">.co</span>/<span class="number">127.0</span>.<span class="number">0.1</span><span class="hexcolor">#105</span>3
server=/<span class="class">.bitly</span><span class="class">.com</span>/<span class="number">127.0</span>.<span class="number">0.1</span><span class="hexcolor">#105</span>3
server=/<span class="class">.twimg</span><span class="class">.com</span>/<span class="number">127.0</span>.<span class="number">0.1</span><span class="hexcolor">#105</span>3
server=/<span class="class">.tinypic</span><span class="class">.com</span>/<span class="number">127.0</span>.<span class="number">0.1</span><span class="hexcolor">#105</span>3
server=/<span class="class">.yfrog</span><span class="class">.com</span>/<span class="number">127.0</span>.<span class="number">0.1</span><span class="hexcolor">#105</span>3
</code></pre><h2 id="使用iptables对流量进行重定向">使用iptables对流量进行重定向</h2><p>之前犯了一个错误，采用了默认流量重定向，特定流量（亚太流量）穿透的思路。这样相对来说有很多不必要的流量被重定向到了shadowsocks的服务器端，尤其是在本路由下跑PT的情况。这几天想了下，为什么不只定向某些流量呢。</p>
<p>下面脚本的思路是所有流量默认穿透，只有符合条件的流量才被重定向。这样显得“智能”多了。</p>
<p>您可以直接复制下面的脚本，跟我一样保存为<em>/usr/bin/ss-black.sh</em>，注意运行前要给它运行权限：</p>
<pre><code>chmod +x <span class="regexp">/usr/</span>bin<span class="regexp">/ss-black.sh</span>
</code></pre><p>以下为脚本内容：</p>
<pre><code><span class="shebang">#!/bin/sh
</span>
<span class="comment">#create a new chain named SHADOWSOCKS</span>
iptables -t nat -N SHADOWSOCKS

<span class="comment">#Redirect what you want</span>

<span class="comment">#Google</span>
iptables -t nat -A SHADOWSOCKS -p tcp <span class="operator">-d</span> <span class="number">74.125</span>.<span class="number">0.0</span>/<span class="number">16</span> -j REDIRECT --to-ports <span class="number">1080</span>
iptables -t nat -A SHADOWSOCKS -p tcp <span class="operator">-d</span> <span class="number">173.194</span>.<span class="number">0.0</span>/<span class="number">16</span> -j REDIRECT --to-ports <span class="number">1080</span>

<span class="comment">#Youtube</span>
iptables -t nat -A SHADOWSOCKS -p tcp <span class="operator">-d</span> <span class="number">208.117</span>.<span class="number">224.0</span>/<span class="number">19</span> -j REDIRECT --to-ports <span class="number">1080</span>
iptables -t nat -A SHADOWSOCKS -p tcp <span class="operator">-d</span> <span class="number">209.85</span>.<span class="number">128.0</span>/<span class="number">17</span> -j REDIRECT --to-ports <span class="number">1080</span>

<span class="comment">#Twitter</span>
iptables -t nat -A SHADOWSOCKS -p tcp <span class="operator">-d</span> <span class="number">199.59</span>.<span class="number">148.0</span>/<span class="number">22</span> -j REDIRECT --to-ports <span class="number">1080</span>

<span class="comment">#Shadowsocks.org</span>
iptables -t nat -A SHADOWSOCKS -p tcp <span class="operator">-d</span> <span class="number">199.27</span>.<span class="number">76.133</span>/<span class="number">32</span> -j REDIRECT --to-ports <span class="number">1080</span>

<span class="comment">#1024</span>
iptables -t nat -A SHADOWSOCKS -p tcp <span class="operator">-d</span> <span class="number">184.154</span>.<span class="number">128.246</span>/<span class="number">32</span> -j REDIRECT --to-ports <span class="number">1080</span>

<span class="comment">#Anything else should be ignore</span>
iptables -t nat -A SHADOWSOCKS -p tcp -j RETURN

<span class="comment"># Apply the rules</span>
iptables -t nat -A PREROUTING -p tcp -j SHADOWSOCKS
</code></pre><p>注1：以前的暴力重定向所有流量（除亚洲流量以外）的版本在这里：<a href="https://gist.github.com/reee/fe174cfd8985273bc478" target="_blank" rel="external">https://gist.github.com/reee/fe174cfd8985273bc478</a><br>注2：如果需要添加你自己需要访问的域名很简单。首先使用dig或者nslookup获取域名对应的<strong>正确IP</strong>，然后借助APNIC的IP WHOIS工具：(<a href="http://wq.apnic.net/apnic-bin/whois.pl" target="_blank" rel="external">http://wq.apnic.net/apnic-bin/whois.pl</a>) 可以轻松的获得大部分IP段。以facebook为例：</p>
<p>dig获取的正确IP为：173.252.110.27。<br>通过APNIC查询到173.252.64.0/18均属于facebook。则添加</p>
<pre><code>iptables -t nat -<span class="keyword">A</span> SHADOWSOCKS -p tcp -d <span class="number">173.252.64.0</span>/18 -j REDIRECT --to-ports 1080
</code></pre><p>到上面脚本 倒数第二条前面就可以了。</p>
<p>然后就是见证奇迹的时刻：</p>
<pre><code>#设置路由：
<span class="regexp">/usr/</span>bin/ss-black.sh
#启动shadowsocks
<span class="regexp">/usr/</span>bin<span class="regexp">/ss-redir -c /</span>etc<span class="regexp">/config/</span>shadowsocks.json &amp;
</code></pre><h2 id="其他问题">其他问题</h2><p>查看iptables的NAT表来检查路由表是否已经成功加载：</p>
<pre><code>iptables -t nat <span class="comment">--list</span>
</code></pre><p>停止服务器：</p>
<pre><code>killall ss-redir  <span class="comment"># 关闭shadowsocks。</span>
/etc/init.d/<span class="keyword">firewall</span> <span class="literal">restart</span> <span class="comment"># 清除流量重定向配置。</span>
</code></pre><p>参考文章：<br><a href="https://wido.me/sunteya/use-openwrt-resolve-gfw-dns-spoofing" target="_blank" rel="external">openwrt 上通过 pdnsd 和 dnsmasq 解决 dns 污染</a><br><a href="https://github.com/haohaolee/shadowsocks-openwrt" target="_blank" rel="external">https://github.com/haohaolee/shadowsocks-openwrt</a></p>
<p>更新历史：</p>
<ol>
<li>2014-05-25 小幅修正某些说法，话说乃们在twitter上收藏那么多吓到我了。</li>
<li>2014-06-12 更改路由方式，现在科学多了。</li>
</ol>

      
    </div>
    <footer class="article-footer">
        <div class="article-meta pull-left">
          <span class="post-categories">
            <i class="icon-categories"></i>
            
          </span>
          <span class="post-tags">
            <i class="icon-tags"></i>
            
  

  <a href="/tags/openwrt/">openwrt</a>, <a href="/tags/pdnsd/">pdnsd</a>, <a href="/tags/shadowsocks/">shadowsocks</a>


          </span>
        </div>
        
    </footer>
  </div>
</article>


  <article class="post article">

  
  
    <h3 class="article-title"><a href="/2014/02/26/as-what-i-see/"><span>如是我闻</span></a></h3>
  


  <div class="article-top-meta">
    <span class="posted-on">
      <a href="/2014/02/26/as-what-i-see/" rel="bookmark">
        <time class="entry-date published" datetime="2014-02-26T14:26:09.000Z">
          2014-02-26
        </time>
      </a>
    </span>
  </div>


  

  <div class="article-content">
    <div class="entry">
      
        <p>还在县城的时候，就听说村长去世了。不过直到回到老家，看到田野上的那个土石垒起来的小包，盖满的花圈被雨水淋过，只剩一片惨白。在坟包的不远处散落一地火炮纸红的刺眼。我才算是有了真真切切的认识。</p>
<p>我母亲给我说，你看，村长就埋在那里。</p>
<p>村长是一个怎样的人呢？在我印象中，给我的感觉一直是邋邋遢遢的样子，他身上的衣服破旧不说，还总是给人一种没洗干净的样子。他的女人，跟他一样，穿的破破烂烂。鼻涕流出来，用手横着一下就擦掉了。用我们那的话说，叫打“huan（横）锤”。村长夫人总是两只手拖着她的孙子，也不管她孙子舒不舒服。她的孙子的衣服也是很脏，衣服“像覆了一层黑锅巴”。但是她的孙子有一双很特别的眼睛，黑的发亮。每次被那双眼睛看到，都觉得好像被他看穿了前生后世，因果轮回。</p>
<p>虽然似乎没什么权利，但是村长却是村里不可或缺的一号人物。每次村里要办什么红白喜事，人事分配统统由他来完成。总是回想起他在浑浊不清的广播里面说“我念一下帮忙打杂的人些……”</p>
<p>以前一直幻想，在他的葬礼上，会是谁来为他安排人事呢。可惜我却是错过了。不过春节回家却是遇到了另一家办生辰酒席。才知道村里面早已经选出了新的村长，于是广播虽然同样浑浊不清，但却换了一个声音。</p>
<h2 id="我是谁？">我是谁？</h2><p>在过去的时间里面，我时常陷入一个问题，“我是谁”？</p>
<p>我是谁？作为“我”却很难回答这个问题。</p>
<p>我有指代我的名字，在社会里面完成我的工作，回到家，跟一群人维系家庭成员关系。这似乎就是我了。但是我是我的名字吗？不是。我是我的工作吗？显然不是。我是我在家里面的位置吗？当然也不是！但是我显然存在在这个世界上。这是我问出这个问题的前提。</p>
<p>我曾经构想过这样一个问题。如果写一个小程序。他的唯一的功能就是在人们调用它的时候返回它的名字。</p>
<p>“你好，我是一个程式，我的名字叫程式”。</p>
<p>那它是不是它呢？或者说，它有没有意识到“自我”的存在呢。</p>
<p>看起来，“我”似乎从来不曾存在，”我“又似乎无处不在。</p>
<p>而且我似乎也不是过去的我。哲学上有一个很著名的悖论，叫做忒修斯之船：</p>
<blockquote>
<p>忒修斯与雅典的年轻人们自克里特岛归还时所搭的30桨船被雅典的人留下来做为纪念碑，随着时间过去；木材也逐渐腐朽，而雅典的人便会更换新的木头来替代。最后，该船的每根木头都被换过了；因此，古希腊的哲学家们就开始问著：“这艘船还是原本的那艘忒修斯之船吗？如果是，但它已经没有最初的任何一根木头了；如果不是，那它是从什么时候不是的？”</p>
</blockquote>
<p>这样看来我已经跟昨天不一样了。我还是我么？</p>
<p>我不能再次踏入同一条河。不光是河变了，我也变了。</p>
<p>我可能不是过去的我，我可能甚至都不是我。我被世界改变，我可能自己也在改变。但是我却依然是我。我努力的满足“我”，取悦“我”。我所做的一切，都是因为”我“。”我“在努力的影响整个世界。宣告我的存在。包括写下这篇蛋疼的文章。</p>
<h2 id="我存在吗？">我存在吗？</h2><p>我的存在似乎也是一个伪命题。或许我现在还可以通过与社会交互，来表达”我存在在这个世界上“。然而当我终于化为以抔黄土，时间终于会洗刷掉我存在的证据。我曾经存在？或许吧。可惜没有任何人可以来为我证明。如果我们再把眼光放远一点，太阳系也终于走向终点，人类的文明——至少在地球的文明不复存在。恐怕那个时候不光是我们，就是如今，或者过去的”伟人“，存在的证据也会被抹煞一空。</p>
<p>就像是小的时候，我总喜欢在课桌的缝里，小学破败的土墙缝里，塞上一些自己写的字条。盼望有一天有人会发现。而现在回过头去，不光自己写了什么不记得了，那时候的小学校已经被推平，学校的那株大树也被砍掉，修了漂亮的新的村办公室。再也看不到过去的半点痕迹。</p>
<p>就像是门前的那条小河。我还记得小时候里面鱼虾成群，某天放学的我还有捡到一条搁浅的小鱼。现在却被山上修公路冲下来的泥石填平。还记得小时候在里面翻开石头找寻里面可能出现的铜钱。那一片片铜钱被时光腐蚀磨损，只剩下一片片残破。前朝的遗迹就这样被时光碾压。而被我们翻动的那些石块，静静的被新的泥沙压在底下，等待成为新的历史。</p>
<p>回过头来，多像是幻梦一场。佛教云”色即是空，空即是色“。有即是无，无即是有。所以存在终于也会变成不存在，不存在，也可以是曾经存在。彼岸花开，红粉骷髅。或者根本就是幻梦一场，我们其实生活在一个虚拟的世界。到头来一觉醒来，南柯一梦。</p>
<p>我想起《三体》中，人类文明的纪念碑，黑黝黝的孤零零的高耸如云。可惜最终也随着地球跌落到二维空间。所以纪念碑也终会消失吧。那为何还要纪念呢。</p>
<p>或许吧，在宇宙的边缘，有一个恒星孤零零的死去，爆发的灿烂用了几万亿年，穿越几万亿光年，终于来到你的跟前。本来仰望天空的你却低头去看那春天的花，开的肆无忌惮。于是一不小心，错过了它的那么长的旅程，那么久的跋涉。</p>
<p>不过我想我毕竟是存在的吧——即使可能很多人并没有察觉到这个事实，以后也可能没多少人记得这个事实。</p>
<p>也许是虚无缥缈，但是我现在感觉到我自己存在啊，心脏在随着春天的节奏跳动啊，血液在血管里面汹涌澎湃啊。真好。</p>
<p>如果真有海枯石烂——或许吧。我还真是希望我身上能有一个原子，能够躲过那么多次的撞击，保持现在的样子，为了向这个世界咏叹呢。</p>

      
    </div>
    <footer class="article-footer">
        <div class="article-meta pull-left">
          <span class="post-categories">
            <i class="icon-categories"></i>
            
          </span>
          <span class="post-tags">
            <i class="icon-tags"></i>
            
  

  <a href="/tags/无病呻吟/">无病呻吟</a>


          </span>
        </div>
        
    </footer>
  </div>
</article>


  <article class="post article">

  
  
    <h3 class="article-title"><a href="/2013/12/15/miss-someone/"><span>时光·漫步</span></a></h3>
  


  <div class="article-top-meta">
    <span class="posted-on">
      <a href="/2013/12/15/miss-someone/" rel="bookmark">
        <time class="entry-date published" datetime="2013-12-15T15:56:07.000Z">
          2013-12-15
        </time>
      </a>
    </span>
  </div>


  

  <div class="article-content">
    <div class="entry">
      
        <p>还记得在高中的时候，特别喜欢在黄昏时候，倚着窗户，看着外面的高楼大厦。</p>
<p>彩灯一个个打开，点亮各种建筑的轮廓。然后又关闭，再打开。像天上的星星一样，一闪一闪。</p>
<p>后来去很远的地方读大学，坐着火车，穿越崇山峻岭，然后突然就看到了窗外亮起了点点的昏黄灯光，点缀在漆黑的夜幕下。</p>
<p>突然就有很温暖的感觉。宁静而又祥和。</p>
<p>特别喜欢一个人走在陌生的城市，看着陌生的人，做着应该他们去完成的事情。可是我应该做些什么事情呢，不，我只需要安安静静的看着就好了。</p>
<p>其实想要化作风，轻抚每一个遇到的脸庞，不管是稚嫩的咿呀学语，被岁月侵蚀的满面鬓霜还是英姿勃发，不可一世。<br>想要变成雨，从天空慢慢的落到下面的人身上，不管他/她是在发愁明天的柴木油盐酱醋茶，还是只是在苦恼，待回的聚会到底穿哪双鞋才好。<br>就让我变成空气吧，静静的旁观这世界的冷漠，欢乐，愤怒，幸福和哀伤。</p>
<p>我遇见很多人。<br>我错过很多人。<br>我忘记很多人。<br>我记起很多人。</p>
<p>那个时候的我们，因为某些原因聚集到一起，而如今的我们，又因为某些原因，四散天涯。</p>
<p>细细回想，却又想不起初识的场景，再也记不得那时的模样。</p>
<p>那是懵懵懂懂，小心翼翼的模样。<br>那时豪情万丈，充满幻想的模样。<br>而我已经快忘了，很久以前那个，卑微，做什么都畏畏缩缩的我了。</p>
<p>一定有更好的风景在远处等我，你说是吧。</p>
<p>因为错过的东西，始终就是错过了吧。</p>
<p>只是，却不知，今夕何夕。</p>

      
    </div>
    <footer class="article-footer">
        <div class="article-meta pull-left">
          <span class="post-categories">
            <i class="icon-categories"></i>
            
          </span>
          <span class="post-tags">
            <i class="icon-tags"></i>
            
  

  <a href="/tags/无病呻吟/">无病呻吟</a>


          </span>
        </div>
        
    </footer>
  </div>
</article>


  <article class="post article">

  
  
    <h3 class="article-title"><a href="/2013/12/15/rain-drop-on-the-world/"><span>雨一直下</span></a></h3>
  


  <div class="article-top-meta">
    <span class="posted-on">
      <a href="/2013/12/15/rain-drop-on-the-world/" rel="bookmark">
        <time class="entry-date published" datetime="2013-12-15T07:43:36.000Z">
          2013-12-15
        </time>
      </a>
    </span>
  </div>


  

  <div class="article-content">
    <div class="entry">
      
        <embed src="http://www.xiami.com/widget/0_1771737868/singlePlayer.swf" type="application/x-shockwave-flash" width="257" height="33" wmode="transparent">

<p>一个人撑着伞走在雨中，看着冰冷的雨下在这个冰冷的世界。</p>
<p>我看到石护栏上的苔藓，在辛苦的生长，即使在这个寒冷的冬天，也努力的要绽放出一点不一样的色彩。</p>
<p>即使无人为它喝彩，甚至连偶尔眼神的逗留都欠奉。</p>
<p>冰冷的风吹来，街道如一潭死水一般波澜不惊。</p>
<p>只有突然从身旁跑过的嬉闹的似乎永远精力充沛，不知疲倦的小朋友，以前在街边被冻得鼻子通红，却没人光顾的小贩。</p>
<p>还有牵着一条土狗，身上穿着不知道裹了几层泥浆的流浪汉，和带着一身疲惫，老眼浑浊，亦步亦趋的老人。</p>
<p>打破了这个世界的死寂。</p>
<p> 而我的脑袋里面却什么都没有想，我懒得对这个世界做出任何回应。</p>
<p>上一次像疯子一样在全城乱跑还是高中的事情，那个时候觉得这个县城好大，好复杂，觉的高中也好大，好复杂。跟同学一起，也不坐公交车，就像两只没头苍蝇，到处乱窜。希望可以借以排除掉心中的不安，与彷徨。</p>
<p>转眼间，同学已经去了云南，在一个小县城买了房子，娶了本地的姑娘。这个县城对我来说已经不过是见过的众多城市中很小的一个。我却又觉得这个社会好大，好复杂。无所适从。 脚步里，还是免不了的不安，彷徨。</p>
<p>其实我很喜欢雨，在雨点声声里，似乎这个喧嚣的世界也会安静下来，显得祥和，平静。这个世界的浮华，似乎跟着外面的灰尘一样，被荡涤掉了。</p>
<p>但是我也讨厌雨，冬日的冰冷，苦寒，似乎随着雨滴降落到这个世界，慢慢的潜伏到了心里。</p>
<p>这个世界，好冷啊。 </p>
<p>昨晚一直处在半睡半醒的状态，混乱的似乎连时间的流逝都搞不清楚了。今天很困，却怎么也睡不着觉。</p>
<p>我却不知道该怎么办了。</p>
<p>其实我早就知道的吧。 </p>
<p>今天去吃了豆花饭，一直觉得味道不对，结果才发现是以前最爱吃的豆豉忘了放。</p>

      
    </div>
    <footer class="article-footer">
        <div class="article-meta pull-left">
          <span class="post-categories">
            <i class="icon-categories"></i>
            
          </span>
          <span class="post-tags">
            <i class="icon-tags"></i>
            
  

  <a href="/tags/无病呻吟/">无病呻吟</a>


          </span>
        </div>
        
    </footer>
  </div>
</article>


  <article class="post article">

  
  
    <h3 class="article-title"><a href="/2013/10/27/edit-a-batch-of-files-in-linux/"><span>在Linux下面批量修改文件名字以及内容</span></a></h3>
  


  <div class="article-top-meta">
    <span class="posted-on">
      <a href="/2013/10/27/edit-a-batch-of-files-in-linux/" rel="bookmark">
        <time class="entry-date published" datetime="2013-10-27T07:39:41.000Z">
          2013-10-27
        </time>
      </a>
    </span>
  </div>


  

  <div class="article-content">
    <div class="entry">
      
        <p>众所周知，sed和awk被称为Linux系统维护的两大瑞士军刀，但是一直没学会……最近遇到批量修改文件的场合，用到了sed，所以记录一下。</p>
<h3 id="批量修改文件名字">批量修改文件名字</h3><pre><code><span class="keyword">for</span> i <span class="keyword">in</span> `ls`; <span class="keyword">do</span> mv <span class="operator">-f</span> <span class="variable">$i</span> `<span class="built_in">echo</span> <span class="variable">$i</span> | sed <span class="string">'s/oldstring/newstring/'</span>`;  <span class="keyword">done</span>
</code></pre><p>其实上面已经不算是一个语句了，而是通过for循环一个个的取出所有文件名达到遍历的效果。<br>基本原理是使用echo取得文件名，交给sed替换字符串然后把结果（也就是新的文件名）作为参数回传给mv。<br>需要注意的是，在shell里面把命令运行结果当作参数引用时，是需要用到 `` （键盘esc下面那个键）把需要引用的部分包围起来的。</p>
<h3 id="批量替换文件内容">批量替换文件内容</h3><pre><code>sed -i <span class="string">"s/oldstring/newstring/g"</span> `<span class="keyword">grep</span> -rl oldstring <span class="regexp">/path/</span>to<span class="regexp">/dir`</span>
</code></pre><p>这个其实蛮简单的。说下sed的几个参数。</p>
<pre><code>-<span class="ruby">i 表示直接把文件编辑掉（默认不会去修改文件内容）。
</span>双引号里面第一个s 的意思是替换，这个应该已经比较明确了。
而最后那个g表示全部替换。
</code></pre><p>同样的，grep的结果是作为参数传给sed的，所以也需要用 `` 包围起来。其实个人感觉直接来个ls应该也能达到目的。</p>

      
    </div>
    <footer class="article-footer">
        <div class="article-meta pull-left">
          <span class="post-categories">
            <i class="icon-categories"></i>
            
          </span>
          <span class="post-tags">
            <i class="icon-tags"></i>
            
  

  <a href="/tags/Linux/">Linux</a>


          </span>
        </div>
        
    </footer>
  </div>
</article>


  <article class="post article">

  
  
    <h3 class="article-title"><a href="/2013/08/30/a-review-of-what-is-history/"><span>《历史是什么》读后感</span></a></h3>
  


  <div class="article-top-meta">
    <span class="posted-on">
      <a href="/2013/08/30/a-review-of-what-is-history/" rel="bookmark">
        <time class="entry-date published" datetime="2013-08-30T14:49:25.000Z">
          2013-08-30
        </time>
      </a>
    </span>
  </div>


  

  <div class="article-content">
    <div class="entry">
      
        <p>作为历史研究的经典著作，卡尔从各种方面诠释了历史到底是什么的问题。从我的理解来看，包括下面这些东西：</p>
<p>1.我们所接触到的历史其实并不等同于“过去的事”，而是由历史学家根据自己的理解，选取加工后呈现的部分事实，而且通常掺杂了历史学家的个人思想在里面。进一步因为人是作为社会的个体，所以事实上，历史的呈现与历史学家所处的环境，时代也息息相关。</p>
<p>2.历史事实不光应该关注孤立的个人行为，同时还需要关注到社群的普遍现象。时代的伟人既是历史进程的产物，也是历史进程的推动者，因此值得额外关注。</p>
<p>3.历史具备完整的一般科学研究框架：假设求证，因此历史毋庸置疑是一门社会科学。不过在历史研究中，人既作为研究的主体，又作为被研究的对象。不能用传统的主体，客体概念来严格界限。</p>
<p>4.在历史研究中，虽然历史包含宗教问题，但是不能简单的用宗教来回答历史问题。同样的，在历史中的道德也不应该用一般的绝对道德来衡量，我们只能根据当时的情况判断：对于历史进程是进步还是退步。事实上，卡尔认为“历史是一个斗争的过程，其结果——不管我们把这些结果判断为是好还是坏——是一些群体直接地或间接地。通常是直接多于间接，以牺牲另外一些群体获得的。”</p>
<p>5.历史中是存在因果关系的，我们可以借助历史研究来预言普遍性事件——但是对于个体的孤立事件却无能为力——而恰好很多时候这样的个体事件可能具有很重要的意义。</p>
<p>6.因为历史可以通过一代代的获得性技巧的传授，因此即使有短期的倒退偏离和间断，历史也一定是整体上进步的。</p>
<p>我觉得这里面最有意思的应该是人的自由意志。如果人不具有自由意志，那么我们可以通过研究历史，可以通过模式化预测完全预言现在——无疑这样的现实实在是让人提不起任何的兴趣。而且在这本书里面，人的自由意志占有了非常大的比重，以开篇讨论历史是如何得到的为例：“假如哲学家告诉我们的，我们不能两次踏进同一条河流是正确的话，由于同样的原因，这或许也是正确的：同一位历史学家不能够写出两本完全一样的历史著作”。我相信自由意志带来的个体差异正是历史如此丰富多彩，以及历史这个学科本身存在的意义。</p>
<p>那么人到底有没有自由意志呢？</p>
<p>一方面我们可以很容易的想到，如果单纯的从宏观角度来观察人类的行为。在一个连续的时间轴上，对事件进行无限微分我们可以姑且认为其实人的行为看起来好像是线性连续的——譬如打出这行字我必须连续的移动手到键盘上，然后连续的做出敲击动作。——等等，这岂不是说如果给我们一个足够大计算能力的计算机（我们都知道这个假设目前完全是天方夜谭），如果找到宇宙的初始条件我们完全可以模拟出每个人的状态了？或者说只要找出宇宙一个状态的情况（深入切入历史），我们就可以完整的预言未来？有这么简单么？</p>
<p>现实没有这么简单，也不会如此枯燥。因为如果我们真正开始仔细研究问题，把尺度缩小到量子级别，我们就会掉入海森堡测不准原理的陷阱——既然构成这个世界的基本粒子无法准确预言，那么由这些粒子构成的世界呢？我相信答案应该是我们仍然无法预言——虽然他看起来似乎有一定的宏观逻辑性——要知道经典物理学当时还看起来那么正确呢。 另一个“阴谋论”是因为量子的测不准同时，又出现了更加诡异的量子纠缠——看起来似乎冥冥中有一个高高在上，不属于自然的神明在操控这一切——如果是这样，人类的自由意志那就无疑是扯淡了。</p>
<p>我相信随着物理学和现代生物学的发展，当我们能够准确描述这个宇宙，准确描述人类个体的时候，也就是历史学最大的问题：“具有普遍适用性却无法预言个体随机事件”被解决的时候。</p>
<p>不过至于现在嘛……我们是完全说不清楚到底是不是因为陈独秀出去嫖娼被抓住逐出北大导致了共产党的成立呢。</p>
<p>要是他没被抓住会怎样？哈哈</p>

      
    </div>
    <footer class="article-footer">
        <div class="article-meta pull-left">
          <span class="post-categories">
            <i class="icon-categories"></i>
            
          </span>
          <span class="post-tags">
            <i class="icon-tags"></i>
            
  

  <a href="/tags/读后感/">读后感</a>


          </span>
        </div>
        
    </footer>
  </div>
</article>


  <article class="post article">

  
  
    <h3 class="article-title"><a href="/2013/08/05/confige-an-openwrt-router-to-serve-as-a-dumb-access-point/"><span>配置一台基于openwrt的无线路由器作为纯无线AP使用</span></a></h3>
  


  <div class="article-top-meta">
    <span class="posted-on">
      <a href="/2013/08/05/confige-an-openwrt-router-to-serve-as-a-dumb-access-point/" rel="bookmark">
        <time class="entry-date published" datetime="2013-08-05T05:46:38.000Z">
          2013-08-05
        </time>
      </a>
    </span>
  </div>


  

  <div class="article-content">
    <div class="entry">
      
        <h2 id="什么是dumb_AP以及为什么需要dumb_AP">什么是dumb AP以及为什么需要dumb AP</h2><p>我觉得第一个要解释的是，什么是AP，也就是或者说无线接入点（Wireless Access Point）。 </p>
<p>无线接入点可以简单的看做是通过无线提供的集线器。无线路由器会自己构造一个子网然后所有接入用户共享一个出口IP。而无线接入点只提供接入服务（无线的网线），接入客户的路由服务由接入点的上层设备提供。举个栗子：某正常大学某楼分配的是59.64.32.0/24 的一个子网。如果用无线路由器，那么路由器下所有用户没有公网IP，共享一个公网IP出口（59.64.32.x）。而如果使用无线AP，那么通过无线AP连接的每一个用户都能分配到一个公网IP（59.64.32.x）。</p>
<p>对于教育网用户还有一个好处，因为目前大多数路由器并不支持ipv6，所以如果通过无线路由器的方式没办法获得IPV6地址也就上不了传说中的六维什么的少数教育网福利。而通过无线AP模式，则完全由上层设备路由，所以每个通过无线AP连接的用户都能正常获得IPV6地址（猜测，没有实践过）。</p>
<p>另外一个补充就是，因为无线路由器方式共享一个出口IP，所以说适用于共享上网的场景。而无线AP方式因为每个用户都是独立获取IP，所以适合于每个用户都用自己的账号进行上网的场景。</p>
<p>openwrt上对<a href="http://wiki.openwrt.org/doc/recipes/dumbap" target="_blank" rel="external">Dumb AP</a>的定义，事实上就是我们所说的AP。这里就不再多说了。</p>
<h2 id="配置openwrt的dumb_AP_模式">配置openwrt的dumb AP 模式</h2><p>怎么刷openwrt我就不说了吧……= =</p>
<p>主要参考 <a href="http://wiki.openwrt.org/doc/recipes/dumbap" target="_blank" rel="external">OpenWRT 官方Wiki：Dumb AP</a>，但是官方Wiki有少许语焉不明。当然Wiki肯定会被继续完善，不过现在还是先看哥的吧。</p>
<h3 id="修改网络配置文件(/etc/config/network)">修改网络配置文件(/etc/config/network)</h3><p>因为现在纯无线AP反而比无线路由器贵，所以说一般来讲看这个教程的应该是无线路由器的用户（非无线路由器用户请参考openwrt 官方教程），那么我们需要把WAN口和LAN口桥接起来（如果我没理解错的话）：</p>
<pre><code>config interface lan
        <span class="built_in">option</span> <span class="keyword">type</span>     <span class="symbol">'bridge'</span>
        <span class="built_in">option</span> ifname   <span class="symbol">'eth0</span>.<span class="number">1</span> eth1'  # 将vlan1 和 wan桥接起来
        <span class="built_in">option</span> proto    <span class="symbol">'dhcp'</span>         
</code></pre><p>这里需要注意的是，官方教程是把eth0.1和eth1桥接起来，但是事实上很多设备的WAN口不一定是eth1，譬如水星4530r的wan事实上却是eth0.2，所以请自行参考wan口的配置文件，譬如如果wan段如下，那么在lan段就应该是将eth0.1和eth0.2桥接起来，也就是： option ifname   ‘eth0.1 eth0.2’</p>
<pre><code>config interface wan
        <span class="attribute">...</span>
        option ifname   <span class="string">'eth0.2'</span>
        <span class="attribute">...</span>
</code></pre><p>桥接起来以后，我们需要禁用本身路由器关于wan口的配置：直接把所有wan，wan6的配置文件部分都注释掉，譬如wan6的配置部分：</p>
<pre><code><span class="array">#config interface </span><span class="string">'wan6'</span>
<span class="array">#    option proto </span><span class="string">'dhcpv6'</span>
<span class="array">#    option ifname </span><span class="string">'@wan'</span>
</code></pre><h3 id="修改无线配置文件(/etc/config/wireless)">修改无线配置文件(/etc/config/wireless)</h3><p>修改完成以后的文件看起来像下面这样：</p>
<pre><code>config <span class="string">'wifi-iface'</span>
        <span class="built_in">option</span> device  <span class="string">'radio0'</span> <span class="preprocessor"># 这个不要动</span>
        <span class="built_in">option</span> network <span class="string">'lan'</span>  <span class="preprocessor"># 酌情修改，可能不需要更改</span>
        <span class="built_in">option</span> mode    <span class="string">'ap'</span> <span class="preprocessor"># 酌情修改，可能不需要更改</span>
        <span class="built_in">option</span> ssid    <span class="string">'ap_myaccesspoint'</span> <span class="preprocessor"># 无线的名字</span>
        <span class="built_in">option</span> encryption <span class="string">'psk2'</span>  <span class="preprocessor"># 无线加密方式</span>
        <span class="built_in">option</span> key     <span class="string">'ap_password'</span> <span class="preprocessor"># 无线密码 psk2要求8位以上。</span>
</code></pre><h3 id="关闭DHCP服务和防火墙">关闭DHCP服务和防火墙</h3><p>通过uci来关闭DHCP服务：</p>
<pre><code>uci <span class="operator"><span class="keyword">set</span> dhcp.lan.<span class="keyword">ignore</span>=<span class="number">1</span>
uci <span class="keyword">commit</span> dhcp
/etc/init.d/dnsmasq restart</span>
</code></pre><p>关闭防火墙：</p>
<pre><code>/etc/init.d/<span class="keyword">firewall</span> disable
/etc/init.d/<span class="keyword">firewall</span> <span class="literal">stop</span>
</code></pre><p>然后载入新的配置：</p>
<pre><code><span class="regexp">/etc/i</span>nit.d<span class="regexp">/network reload</span>
</code></pre><h2 id="其他问题">其他问题</h2><p>在配置为无线AP模式以后，如果还需要访问路由器，需要将电脑的IP地址手动设置为：</p>
<pre><code><span class="tag">ip</span>：192<span class="class">.168</span><span class="class">.1</span><span class="class">.x</span>
<span class="rule"><span class="attribute">mask</span>:<span class="value"> <span class="number">255.255</span>.<span class="number">255.0</span>
gateway: <span class="number">192.168</span>.<span class="number">1.1</span></span></span>
</code></pre><p>的方式才能正常访问。</p>

      
    </div>
    <footer class="article-footer">
        <div class="article-meta pull-left">
          <span class="post-categories">
            <i class="icon-categories"></i>
            
          </span>
          <span class="post-tags">
            <i class="icon-tags"></i>
            
  

  <a href="/tags/dumb-ap/">dumb-ap</a>, <a href="/tags/ipv6/">ipv6</a>, <a href="/tags/mw4530r/">mw4530r</a>, <a href="/tags/openwrt/">openwrt</a>


          </span>
        </div>
        
    </footer>
  </div>
</article>



<nav class="pagination">
  
  
  <a href="/page/2/" class="pagination-next">下一页</a>
  
</nav>
      </main>
    </article>

    <footer id="colophon" class="site-footer" role="contentinfo"><div class="site-info">
  <p class="meta">
    Proudly powered by <a href="https://hexo.io/" target="_blank">Hexo</a> and
    Theme by <a href="https://github.com/CodeDaraW/Hacker" target="_blank">Hacker</a>
    </br>
    
    &copy; 2016 Hong Zhang
    
  </p>
</div></footer>
    
  </div>
</div>
</body>
</html>