<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-CN">
		<id>http:///https//wiki.microduino.cn/index.php?action=history&amp;feed=atom&amp;title=%E9%A1%B9%E7%9B%AE%E5%8D%81%E5%85%AB--%E4%BE%BF%E6%90%BA%E5%BC%8F%E7%BD%91%E7%BB%9C%E9%9A%90%E7%A7%81%E4%BF%9D%E6%8A%A4%E5%99%A8%28%E5%86%85%E9%83%A8%E5%85%A8%E5%B1%80VPN%29%2F%E5%85%AC%E5%8F%B8%E5%86%85%E7%BD%91%E7%A1%AC%E4%BB%B6%E8%AE%BF%E9%97%AE%E6%8E%A7%E5%88%B6%E6%9C%BA</id>
		<title>项目十八--便携式网络隐私保护器(内部全局VPN)/公司内网硬件访问控制机 - 版本历史</title>
		<link rel="self" type="application/atom+xml" href="http:///https//wiki.microduino.cn/index.php?action=history&amp;feed=atom&amp;title=%E9%A1%B9%E7%9B%AE%E5%8D%81%E5%85%AB--%E4%BE%BF%E6%90%BA%E5%BC%8F%E7%BD%91%E7%BB%9C%E9%9A%90%E7%A7%81%E4%BF%9D%E6%8A%A4%E5%99%A8%28%E5%86%85%E9%83%A8%E5%85%A8%E5%B1%80VPN%29%2F%E5%85%AC%E5%8F%B8%E5%86%85%E7%BD%91%E7%A1%AC%E4%BB%B6%E8%AE%BF%E9%97%AE%E6%8E%A7%E5%88%B6%E6%9C%BA"/>
		<link rel="alternate" type="text/html" href="https//wiki.microduino.cn/index.php?title=%E9%A1%B9%E7%9B%AE%E5%8D%81%E5%85%AB--%E4%BE%BF%E6%90%BA%E5%BC%8F%E7%BD%91%E7%BB%9C%E9%9A%90%E7%A7%81%E4%BF%9D%E6%8A%A4%E5%99%A8(%E5%86%85%E9%83%A8%E5%85%A8%E5%B1%80VPN)/%E5%85%AC%E5%8F%B8%E5%86%85%E7%BD%91%E7%A1%AC%E4%BB%B6%E8%AE%BF%E9%97%AE%E6%8E%A7%E5%88%B6%E6%9C%BA&amp;action=history"/>
		<updated>2026-06-05T23:43:11Z</updated>
		<subtitle>本wiki的该页面的版本历史</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>https//wiki.microduino.cn/index.php?title=%E9%A1%B9%E7%9B%AE%E5%8D%81%E5%85%AB--%E4%BE%BF%E6%90%BA%E5%BC%8F%E7%BD%91%E7%BB%9C%E9%9A%90%E7%A7%81%E4%BF%9D%E6%8A%A4%E5%99%A8(%E5%86%85%E9%83%A8%E5%85%A8%E5%B1%80VPN)/%E5%85%AC%E5%8F%B8%E5%86%85%E7%BD%91%E7%A1%AC%E4%BB%B6%E8%AE%BF%E9%97%AE%E6%8E%A7%E5%88%B6%E6%9C%BA&amp;diff=12211&amp;oldid=prev</id>
		<title>Shengkai_81@163.com：Created page with &quot;网络隐私/内网穿透本质上使用VPN即可实现，但真实应用中，绝大部分VPN软件(OpenVPN除外)不支持路由推送，抑或路由本身难以维护。使...&quot;</title>
		<link rel="alternate" type="text/html" href="https//wiki.microduino.cn/index.php?title=%E9%A1%B9%E7%9B%AE%E5%8D%81%E5%85%AB--%E4%BE%BF%E6%90%BA%E5%BC%8F%E7%BD%91%E7%BB%9C%E9%9A%90%E7%A7%81%E4%BF%9D%E6%8A%A4%E5%99%A8(%E5%86%85%E9%83%A8%E5%85%A8%E5%B1%80VPN)/%E5%85%AC%E5%8F%B8%E5%86%85%E7%BD%91%E7%A1%AC%E4%BB%B6%E8%AE%BF%E9%97%AE%E6%8E%A7%E5%88%B6%E6%9C%BA&amp;diff=12211&amp;oldid=prev"/>
				<updated>2015-12-27T08:18:35Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;网络隐私/内网穿透本质上使用VPN即可实现，但真实应用中，绝大部分VPN软件(OpenVPN除外)不支持路由推送，抑或路由本身难以维护。使...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;网络隐私/内网穿透本质上使用VPN即可实现，但真实应用中，绝大部分VPN软件(OpenVPN除外)不支持路由推送，抑或路由本身难以维护。使用全局VPN会严重影响本地浏览反应速度（例如在线视频）。&lt;br /&gt;
&lt;br /&gt;
==背景介绍==&lt;br /&gt;
这里以某国内著名IT企业应用背景为例，公司能够访问国内各视频网站，但是限制京东、淘宝等购物网站。我们希望通过特定路由器突破限制的同时不影响其它访问。&lt;br /&gt;
&lt;br /&gt;
具体实现时，有如下几点需要考虑：&lt;br /&gt;
* 国内各大云服务器商均按流量收费，因此希望有且仅有必要的访问才走服务器中转;&lt;br /&gt;
* 京东、淘宝的IP列表不可能搜集齐全，而且可能旗下某些非购物型网站可以访问；&lt;br /&gt;
* 使用第三方CDN加速，第三方CDN同时为其它厂商服务，其它厂商服务不受影响，此部分希望不通过VPN。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
便携式网络隐私保护器/公司内网硬件访问控制机与其原理相同，不再详述。&lt;br /&gt;
&lt;br /&gt;
==技术实现==&lt;br /&gt;
&lt;br /&gt;
整理上述需求，我们希望实现按域名路由。dnsmasq 在 2.66 版之后加入了对 ipset 的支持，可将指定域名的 IP 解析后自动加入某一 ipset 中。&lt;br /&gt;
再配置路由规则，使该 ipset 中的 IP 走 VPN 即可。使用关键字dnsmasq ipset即可搜索出一堆相关文章。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
不过官方版本的dnsmasq不能满足第三种需求，以facebook为例，其使用了akamai的CDN服务，但是微软也使用akamai为其提供windows更新服务。&lt;br /&gt;
facebook使用akamai的域名有fbcdn-profile-a.akamaihd.net、fbcdn-sphotos-a-a.akamaihd.net、fbcdn-sphotos-f-a.akamaihd.net、fbcdn-sphotos-g-a.akamaihd.net等，&lt;br /&gt;
对于众多的域名我们可以一一列下，但是难免会有遗漏，不难发现所有域名均以fbcdn开头，如果dnsmasq支持正则表达式，则可以通过^fbcdn-[a-z\-]+\.akamaihd\.net$一条&lt;br /&gt;
匹配上述4条。可惜dnsmasq官方并没有支持正则表达式，不过有网友已经提供并开源https://github.com/cuckoohello/dnsmasq-regex，在microwrt官方repo中也提供支持&lt;br /&gt;
正则表达式的dnsmasq包方便广大玩家使用。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
VPN方面选择比较常用的openvpn，其它VPN与此配置类似。OpenVPN服务器端的安装配置请自行Google。&lt;br /&gt;
&lt;br /&gt;
==安装配置==&lt;br /&gt;
&lt;br /&gt;
首先安装支持正则表达式版本的dnsmasq,microwrt玩家可从microwrt官方repo中获取。&lt;br /&gt;
各位首先在/etc/opkg.conf文件末尾加入如下一行：&lt;br /&gt;
&lt;br /&gt;
    src/gz microwrt http://repo.microduino.cn/microwrt/&lt;br /&gt;
&lt;br /&gt;
并且移除option check_signature 1，然后运行&lt;br /&gt;
&lt;br /&gt;
    opkg update &amp;amp;&amp;amp; opkg install dnsmasq-full&lt;br /&gt;
&lt;br /&gt;
这里使用OpenVPN因此还需安装openvpn软件&lt;br /&gt;
&lt;br /&gt;
    opkg install openvpn-openssl&lt;br /&gt;
&lt;br /&gt;
配置dnsmasq，这里以taobao为例,在/etc/dnsmasq.conf末尾添加如下几行,其中最后一行添加了正则表达式的示例&lt;br /&gt;
&lt;br /&gt;
    ipset=/taobao.com/vpn&lt;br /&gt;
    ipset=/tmall.com/vpn&lt;br /&gt;
    ipset=/:^fbcdn-[a-z\-]+\.akamaihd\.net$:/vpn&lt;br /&gt;
&lt;br /&gt;
修改完毕后，重启dnsmasq。然后在/etc/firewall.user文件末尾添加iptables配置，使得dnsmasq解析后加入ipset vpn的ip列表走特定路由表&lt;br /&gt;
&lt;br /&gt;
    ipset create vpn iphash -exist&lt;br /&gt;
    iptables -t mangle -I PREROUTING -m set --match-set vpn dst -j MARK --set-mark 1&lt;br /&gt;
&lt;br /&gt;
最后进行openvpn的配置，在一般的openvpn配置文件末尾添加下列几行&lt;br /&gt;
&lt;br /&gt;
    script-security 2&lt;br /&gt;
    route-noexec&lt;br /&gt;
    up /etc/openvpn/updown.d/up.sh&lt;br /&gt;
    down /etc/openvpn/updown.d/down.sh&lt;br /&gt;
&lt;br /&gt;
这几行的目的是不使用openvpn服务器端推送的路由配置，执行up.sh脚本中的程序，up.sh脚本内容如下：&lt;br /&gt;
&lt;br /&gt;
    #!/bin/sh&lt;br /&gt;
    ip route add default via $route_vpn_gateway dev $dev table 100&lt;br /&gt;
    ip rule add fwmark 1 priority 1984 table 100&lt;br /&gt;
&lt;br /&gt;
这里可以看出我们添加了新的路由表100，该路由表中添加VPN服务器的默认路由，第二行使得通过iptables标记的目的地址位于ipset vpn列表中访问均走&lt;br /&gt;
路由表100。&lt;br /&gt;
&lt;br /&gt;
至此我们即实现有且仅有taobao、tmall的访问经过VPN绕行，其它访问均从本地。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
关于文中具体的技术细节，请自行度娘dnsmasq ipset。&lt;/div&gt;</summary>
		<author><name>Shengkai_81@163.com</name></author>	</entry>

	</feed>