愚蠢的地球人

OpenWrt路由器下面设备直接访问光猫

目前大部分的家庭宽带都是路由器的WAN口直接连接光猫的LAN口,光猫设置为桥接模式,路由器进行PPPOE拨号上网。假如光猫的LAN口地址为192.168.0.1,路由器的LAN口IP地址为192.168.1.1,电脑通过DHCP获取到的IP地址为192.168.1.100。如果想访问路由器的管理页面,很简单,直接通过浏览器访问http://192.168.1.1就可以。但是由于电脑跟光猫不在同一个局域网,所以电脑上无法直接通过192.168.0.1这个地址来访问光猫。如果想要访问光猫的管理页面就只能重新找根网线直接将电脑跟光猫的LAN口连接,然后手动设置电脑的IP地址为192.168.0.x,这样才能访问,比较麻烦。有没有什么办法能直接从192.168.1.100访问192.168.0.1呢?如果你使用的的是OpenWrt的路由器,这里介绍两种办法。

More...


OpenWRT路由器科学上网自动分流的工作原理

最近研究了一台刷了OpenWRT的路由器,里面有一个科学上网的工具引发了我的兴趣。
研究了好几天,终于把国内国外流量自动分流的原理弄清了。
很多东西都是个人的猜测,如有不对的地方,欢迎大家留言讨论。

OpenWRT科学上网自动分流主要是利用了如下几个工具:iptables、ipset、dnsmasq、pdnsd。我先来一个一个的解释一下这几个东东:

iptables是Linux系统自带的基于包过滤的防火墙工具,可以对流入、流出及流经服务器的数据包进行精细的控制。

ipset是iptables的扩展,它允许你创建某一类IP地址的集合,然后将这个集合交给iptables来处理。

dnsmasq是一个DNS缓存服务器,它可以将特定的域名发送给不同的dns服务器进行解析,不仅如此,它还可以把解析出来的IP地址存储在指定的ipset中。

pdnsd也是一个DNS缓存服务器,相对于dnsmasq,pdnsd的优点是可以使用TCP方式来查询DNS,但是pdnsd无法设置ipset,所以需要将dnsmasq和pdnsd两个结合起来使用。

弄清楚了这些工具的作用,OpenWRT路由器科学上网自动分流的工作原理就不难理解了:

首先,科学上网的进程启动之后会自动将需要走代理的域名地址添加到dnsmasq的conf-dir目录下的一些名为*.conf的文件中,内容如下:
server=/google.com/127.0.0.1#1053
ipset=/google.com/gfwlist
第一行意思是解析google.com这个域名时不使用默认的DNS服务器,而是将查询请求转发到127.0.0.1#1053(pdnsd侦听的端口),由pdnsd来负责解析。
第二行意思是将google.com解析出来的IP地址添加到一个名为gfwlist的ipset集合里面。
这样,需要走代理的域名使用pdnsd来解析,不需要走代理的域名使用宽带运营商默认的DNS来解析,实现了域名解析的分流。

然后,它会修改iptables的转发规则,将gfwlist这个ipset添加到iptables的NAT规则列表中,利用iptables来转发这个ipset中的数据。
我们来查看一下路由器的iptables如何处理名为gfwlist的这个ipset:

More...


利用OpenWrt的Hotplug与DNSPOD的API实现DDNS

既然标题叫“利用OpenWrt的Hotplug与DNSPOD的API实现DDNS”,那么首先你得有一个openwrt的路由器,其次你需要有一个在dnspod.cn解析的域名,最后你家的宽带得要是公网IP。除此之外,既然你需要把域名解析到你家宽带的IP,那么你家里肯定有一台需要从外网访问的Server。


如果这些你都有,那就跟着我一起动手来折腾吧。


Hotplug,直译就是热插拔。在OpenWrt中,无论何时一个设备从系统中增删,都产生一个“热插拔事件”。每次网络接口启动(up)或者关闭(down)的时候,所有在/etc/hotplug.d/iface/目录中的脚本都会以字母顺序执行。所以每个脚本的前面加上一个数字前缀来设置正确的运行顺序。这就是为什么脚本名称都像:/etc/hotplug.d/iface/<nn>-<scriptname>的原因。

More...