New Openvpn Router

重新买了一个wrt54gs,因为buffalo的wbr2-g54s坏了,本来我以为是电源坏掉,拿去万用表测了下电压和电流都是很正常的数值,只能怀疑是板子烧了,未作深究,拆开看了下,也没有看到哪个地方烧糊了。考虑到DDWRT很大程度上是基于wrt54g系列设计的,使用Openvpn也不会有问题。

如果你有一枚3G上网卡,又有一只3G路由器,恰好你还有一张若干年前的中国移不动WAP包月卡,而且你还有一个运行在公网上,端口在443的Openvpn服务器,嗯,你知道我要做什么。

将3G上网卡插上3G路由器,使用3G路由器拨CMWAP,然后将3G路由器的LAN口插上网线,另一头插进wrt54gs的internet口,不好意思它没有WAN口,然后在wrt54gs上拨Openvpn,相当不幸的是,DDWRT固件中的Openvpn没有代理服务器的设置,所以我们需要自定义配置文件,但是呢,并不是说DDWRTOpenvpnclient的设置界面是毫无用处的,你需要在那个界面中把ca.crt,client.crt和client.key的内容输入进去,根据官方文档所述,可以将自定义的配置加入startup-scripts,不过经过我的测试,从来没有成功过,但通过telnet终端界面,是可以运行的,很显然,下面这个配置,看得懂的自然就看得懂,看不懂的解释了也看不懂,所以我就不解释太多,第一句解释下,DDWRT每次重启会丢失时间,因为大家知道嘛,网络设备的时间是通过ntp获取的,不正确的系统时间会导致证书验证错误而致无法正确连接,也就是我之前提及的数字证书问题。

date 041220302011
killall openvpn
echo “client
dev tun
proto tcp
remote 202.202.0.188 443
http-proxy 10.0.0.172 80
http-proxy-timeout 30
http-proxy-retry
http-proxy-option AGENT “NokiaN90-1/3.0545.5.1 Series60/2.8 Profile/MIDP-2.0 Configuration/CLDC-1.1″
resolv-retry infinite
nobind
persist-key
persist-tun
ca /tmp/openvpncl/ca.crt
cert /tmp/openvpncl/client.crt
key /tmp/openvpncl/client.key
ns-cert-type server
comp-lzo
verb 3
redirect-gateway def1″ > /tmp/openvpncl/openvpn.conf
killall openvpn
openvpn –config /tmp/openvpncl/openvpn.conf –route-up /tmp/openvpncl/route-up.sh –down /tmp/openvpncl/route-down.sh &

连接的速度一般,不是很快,看看网页聊聊扣扣,看个电影要先缓冲一个小时,但这里是北京市二环,附近就是大唐电信,可见中国移不动的TD-SCDMA实在是不过如此。

CentOS下安装Openvpn(含VPS)

前提:VPS已经打开tun/tap,装有iptables,openssl及openssl-devel,现在很多VPS尽量简化,编译器可能会需要安装gcc。

1,下载LZO和OpenVPN。
wget http://www.oberhumer.com/opensource/lzo … .04.tar.gz
wget http://openvpn.net/release/openvpn-2.1_rc22.tar.gz

2,安装,都使用默认路径,
./configure && make && make install
即可。

3,拷贝文件,初始化PKI。
cp -r /root/src/openvpn-2.1_rc22/easy-rsa/ /etc/openvpn/
cd /etc/openvpn/2.0/
export D=`pwd`
export KEY_CONFIG=$D/openssl.cnf
export KEY_DIR=$D/keys
export KEY_SIZE=1024
export KEY_COUNTRY=US
export KEY_PROVINCE=FL
export KEY_CITY=Taipei
export KEY_ORG=”Sun”
export KEY_EMAIL=”[email protected]
. /vars

4,创建CA。

./clean-all
./build-ca

5,签发服务器证书和客户端证书。
./build-key-server server
./build-key client1

6,生成Diffie Hellman。
./build-dh
若不能执行,则 openssl dhparam -out ./keys/dh1024.pem 1024

证书生成完毕,可以把keys目录打包下载到本地以供客户端使用,下面进行openvpn服务器配置,

7,修改配置文件,如需使用代理连接,例如穿过中国移动CMWAP网关,配置文件中应使用tcp proto。
mkdir /etc/openvpn/2.0/conf
cd /etc/openvpn/2.0/conf && vi server.conf
——
port 1194
proto udp
dev tun
ca /etc/openvpn/2.0/keys/ca.crt
cert /etc/openvpn/2.0/keys/server.crt
key /etc/openvpn/2.0/keys/server.key置
dh /etc/openvpn/2.0/keys/dh1024.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push “redirect-gateway def1 bypass-dhcp”
push “dhcp-option DNS 10.8.0.1″
push “dhcp-option DNS 8.8.8.8″
client-to-client
keepalive 10 120
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
verb 3
——

8,启动openvpn.
/usr/local/sbin/openvpn –config /etc/openvpn/2.0/conf/server.conf

9,设置iptables nat,下面的环节,独立主机和OpenVZ会有一些区别,但区别不大,下为独立主机例,OpenVZ需要把eth0替换成venet0。

独立主机一般输入
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
即可,部分OpenVZ VPS需要执行
iptables -t nat -A POSTROUTING -s 10.8.0.0/255.255.255.0 -j SNAT –to-source x.x.x.x
其中x.x.x.x是VPS的IP地址。
保存防火墙配置:
/etc/init.d/iptables save
/etc/init.d/iptables restart

10,设置转发参数。
检查当前参数:sysctl -a | grep forward
对比下列参数,若有为0的项目,使用
sysctl -w net.ipv4.ip_forward=1
类似命令修改。
——
net.ipv4.conf.tun0.mc_forwarding = 0
net.ipv4.conf.tun0.forwarding = 1
net.ipv4.conf.eth0.mc_forwarding = 0
net.ipv4.conf.eth0.forwarding = 1
net.ipv4.conf.virbr0.mc_forwarding = 0
net.ipv4.conf.virbr0.forwarding = 1
net.ipv4.conf.lo.mc_forwarding = 0
net.ipv4.conf.lo.forwarding = 1
net.ipv4.conf.default.mc_forwarding = 0
net.ipv4.conf.default.forwarding = 1
net.ipv4.conf.all.mc_forwarding = 0
net.ipv4.conf.all.forwarding = 1
net.ipv4.ip_forward = 1
——

11,服务端设置已经完成,客户端配置文件如下,其中,x.x.x.x是服务器对外的服务IP地址,ca.crt,client1.crt,client1.key是之前在服务器上生成的服务器证书,客户端证书和客户端密钥。
——
client
dev tun
proto udp
remote x.x.x.x 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert client1.crt
key client1.key
ns-cert-type server
comp-lzo
verb 3
redirect-gateway def1
——

自建xmarks书签同步服务

刚开始的时候我实在想不出来那帮人有什么理由要把xmarks封掉,很好用的书签同步工具啊,后来我仔细一想,谁让它推出那个site info服务的,你能想象打开一个网站,firefox地址栏下面显示了一大堆客观或者不客观的网址评价么?在中国,简直就是自寻死路,我估计那些洋人怎么也搞不清楚他们为什么被封。学学about.Com,现在已经完全屈服,以前能搜到的绝大部分敏感字眼现在上面都搜不出来(当然是英文版,中文版是国内合作的)。

额,下面说重点,重点是这个书签服务不能用之后呢,我又尝试了几个公用的书签服务,比如Google的书签同步服务,实践证明,效果很差,同步速度很慢,编码问题导致乱码的情况很多,所以,我不得不自己弄一个同步服务器了,好在xmarks有说明书,建立一个自己的书签同步服务器并不是很困难的事情。

英文好的同学可以自行去xmarks网站查询,不过现在它已经被封了,如果你不会翻墙的话(最近封锁严重,TOR基本上没法用,我都改用VPN了)还是看我写的好了,当然,你要替换成自己的域名。

1,在域名服务器端设置一个二级域名foxmarks.hnair.com,同时设置http服务器对这个域打开webdav可写,设置dav用户名为ken,密码为ken。

2,touch一个空文件foxmarks.json在根目录下,设置文件权限为www可读写,这个文件名是固定的,不能修改。

3,在xmakrs的设置选项中,设置使用自己的服务器,书签URL为http://foxmarks.hnair.com/foxmarks.json,用户名和密码为前述设置。

4,开始同步,可以查看一下同步日志,如果不正确,日志中也会有体现的。

要点:一个子域名,一台支持webdav的服务器
——
[2009-12-05 19:56:52] —— Xmarks/3.3.2 (/Places) starting sync withhttp://foxmarks.hnair.com ——
[2009-12-05 19:56:52] >>> GET http://[email protected]/foxmarks.json
[2009-12-05 19:56:55] >>> Callback ({token:”12472113af9″, commands:[{action:”insert”, nid:”ROOT”, args:{ntype:”folder”, pnid:null, name:”XYZ”, created:1225964511, modified:1259463320, tnid:”fn77nqec-0″, unid:”fn77nqec-1″}}, created:1124284281, modified:1205293426}}], status:0})
[2009-12-05 19:57:01] lcs = 0 scs = 0
[2009-12-05 19:57:01] Success: e
——