wj’s blog »各平台 route 路由设置

mac osx Lerpard 路由设置:要求默认走公司内网局域网,特殊的ip段走vpn
解决方法是: 手动设置路由表, 以我的实际情况为例:
在windows下,我需要设置如下3条静态路由(首条0.0.0.0为default)
route -p add 0.0.0.0 mask 0.0.0.0 10.13.31.1 (公司网关)
route -p add 10.0.0.0 mask 255.0.0.0 10.13.31.1
route -p add 210.32.0.0 mask 255.255.240.0 10.13.31.1
route -p add 222.205.0.0 mask 255.255.128.0 10.13.31.1
查看路由方法:route print

在Mac OSX 中, 设置路由的命令稍有不同, 为:
route -n add defalut 10.13.31.1
route -n add -net 10.0.0.0/8 10.13.31.1
route -n add -net 210.32.0.0/20 10.13.31.1
route -n add -net 222.205.0.0/17 10.13.31.1
或者用如下的比较明了的命令也可以:
例:route -n add -net 210.32.0.0 -netmask 255.255.240.0 10.13.31.1
查看路由方法:netstat -r (比较特殊)

在linux下的命令又不太一样, 如下:
route add default gw 10.13.31.1
route -n add -net 10.0.0.0/8 gw 10.13.31.1
route -n add -net 210.32.0.0/20 gw 10.13.31.1
route -n add -net 222.205.0.0/17 gw 10.13.31.1

设置好如上静态路由, 就可以VPN内网外网访问无阻啦.
因为*nix的route命令没有 -p 选项(设置为静态路由),
重启后, 设置的3条路由又无效了, 必须重新运行命令,比较麻烦.

mac osx 下设置代理的命令:networksetup
详情sudo networksetup -help

iPad充电器不能为iPhone充电吗? – 谣言粉碎机 – 果壳网 guokr.com

流言: 最近流传着这样一条微博:“请不要用iPad的充电器为iPhone充电,虽然看起来他们长的一样,两者的充电电压都是5V,iPhone的充电电流是1A,而iPad却是2.1A,根据P=UI可得iPhone充电器的功率为5W,而iPad为10.2W。这样做的后果是既伤iPhone又伤iPad充电器(过高电流有可能导致关键电容击穿!)。”

真相: 相信同时拥有iPad和iPhone的果粉为数不少,看到这条微博后,是否会觉得心头一紧?其实完全不用担心。这条微博的原始作者并不真正懂得电子知识,只是单纯依据充电器的参数,想当然地得出了这样一个错误的结论。想弄清楚为什么iPad充电器可以为iPhone充电,得先真正了解充电器的工作原理。

充电过程是怎样的?

充电器插头一端插在220V交流电的插座上,另一端用苹果专用的数据线接到iPhone/iPad上。220V交流电先通过整流电路变成高压直流电,再经过开关管变成高频高压脉冲,然后通过变压器转换为低压(比如5V)脉冲。5V的低压脉冲再经过一个整流、稳压电路,变成5V稳定的直流电。在从220V交流电变为5V直流电的整个过程中,变压器、整流电路、稳压电路只是起到一个改变电能形态的作用(从高压交流电变为低压直流电)。

在充电这件事情上,只有充电器可是一巴掌拍不响的。如果稳压电路输出5V的一端(USB接口)没有接上iPad或者iPhone(术语称为负载),就不会有电流流过,也就不会消耗电能。接上负载之后,充电器才开始工作,流过充电器的电流大小取决于负载的状态:只要在力所能及的范围内,负载需要多大的电流,充电器就提供多大的电流。如果负载需要的电流超过了充电器能够提供的电流上限,那么充电器就会一直输出这个最大的电流。这是因为,充电器内部通常会设计保护电路,一旦输出电流过大,就会触发保护机制,暂停电流输出。不过,苹果公司为了让旗下的所有充电器和数码产品能够尽量混用,想出了一个奇招:

仔细观察一下USB接口,你会发现一共有四个窄金属条,称为四个引脚。这四个引脚分别连接5V电源、GND地、D+数据线正信号和D-数据线负信号。一般兼容USB接口的充电器,D+和D-两个引脚是悬空的,任何设备只要插上这样的充电器,就会从5V和GND两个引脚获得电能。而苹果的充电器则在D+和D-两个数据引脚上增加了分压电阻,使充电的设备能够在充电时从这两条数据线上读到两个电压。网络上的创客经过实践证明,iPhone或者iPod对应的5V1A充电器,D+上的电压是2V,D-也是2V;而iPad使用的5V2.1A的充电器,D+电压2.7V,D-电压2V。当iPad或者iPhone接上充电器时,通过这两个引脚上不同的电压就可以区分当前使用的是哪种充电器,也就能对负载做出相应的调整,从而安全地充电。这种设计还可以防止普通充电器对苹果设备进行充电。

用iPad充电器给iPhone充电,实际会怎样?

iPad和iPhone充电器的设计不同是有原因的。iPhone的电池容量较小,只需要1A的充电电流就能在一个合理的时间内完成充电。虽然更大的充电电流能大幅缩短充电时间,但会带来更大的发热量,而高温是锂电池寿命缩短的头号杀手,所以iPhone充电器的最大输出电流被设计为1A。

iPad的充电器上标明了5V 2.1A,指的是iPad的充电器最大只能输出2.1A的电流。当你用iPad的充电器给iPhone充电时,虽然iPad的充电器最大能够提供2.1A的电流,但由于iPhone只能接受1A的电流,iPad的充电器也只要迁就它。这就好比在4车道的公路上开车,遇到收费站的时候,只有1个收费亭开着,那么同时通过收费站的汽车最多也就只有1辆。

iPad的电池设计成充电电流为2.1A时充电时间最合适。如果用iPhone的充电器给iPad进行充电,由于iPhone的充电器最大只能提供1A的电流输出,整个充电的时间会是原来的2.1倍左右。由于苹果在USB接口数据引脚上耍的小花招,iPad知道这是iPhone的充电器,也就不会“要求”超过1A的充电电流,并不会使iPhone充电器过载而导致损坏。这也好比在公路上,虽然收费站里有4个收费亭,但是由于修路的原因,实际通车的车道只有1条,那么同时通过这个收费站的汽车最多仍然只有1辆。

至于这条微博最后提到的,过高的电流可能导致关键电容击穿,完全逻辑不通,也说明了微博作者缺乏电学物理知识。电容的最基本功能是“通交流,隔直流”。充电器输出的是直流电,而无论多大的直流电流,都是无法通过电容的,并不能导致电容“击穿”。能够击穿电容的,是过高的直流电压,也就是“击穿电压”。

结论:谣言粉碎。 用iPad充电器为iPhone充电是完全可行的,对iPhone和充电器都不会有损伤。而iPhone充电器为iPad充电也可以,只不过所需的充电时间更长。

Dropbox is my publish button – Joe Hewitt

I flipped the switch on my new blog last night. If you’ve been here before, you might not notice anything different. The design hasn’t changed, but behind the scenes everything is new. I’ve written a CMS for the blog in Node.js and Express. It’s hosted on EC2, S3, and Cloudfront. All the content is written in Markdown and pushed to my server using Dropbox. All the code is pulled from repositories on Github and NPM. I use responsive design to adapt nicely to all screen sizes, and use feature testing with has.js and hascan to adapt nicely to all browsers.

Like many nerd-minded bloggers, I prefer writing in Markdown in my programming text editor instead of writing in a browser. Many such systems like Jekyll are growing in popularity, but these usually require you to use Git to push your Markdown files to the server. Call me lazy, but I don’t want to have to go down to the command-line. I just want to save the file to publish it. This is where Dropbox comes in.

All of my blog posts are now in Markdown files, and those files are synchronized to my Linux EC2 servers with Dropbox. My previous blog used Markdown also, but I had to FTP the files to my former Dreamhost server. I used ExpanDrive, which made the FTP process relatively painless, but FTP is still flaky, and ExpanDrive doesn’t deal well with flaky connections. With Dropbox, the synchronization is effortless. A second or two after I save the Markdown file, the post is up on the blog, and I never have to think about it.

Setting up Dropbox

I run Dropbox on my EC2 server using the default Linux AMI, but this should work on most Linux distros.

Start by installing the Dropbox Linux command line client. At the end of the install script, it will ask you to link your Dropbox account by copying and pasting a URL into your browser. Do not do this yet. If you do, it will link your personal Dropbox account to the server, downloading the hundreds of megabytes of files you may have on Dropbox, and exposing potentially sensitive files to any intrepid hacker who breaks into your server.

You only want to synchronize the files needed by your CMS, so you need to create a new Dropbox account that is dedicated to this purpose. Of course, the Dropbox client only works with one account at a time, and your personal computer is going to be logged into your personal account. Luckily, Dropbox folder sharing solves this problem nicely. Once you have your new account, go to your personal account and share the folder containing your CMS files with the new account. Then you can link the new account to your server. Be sure you are logged into the new account in your browser, and then load that URL the installer gave you. Done.

About that CMS

Dropbox alone does not a blog make. My new CMS, called Nerve, processes those magically synchronized files and spits out a website. It’s Apache-licensed and hosted on Github, but I’m not recommending that anyone other than me use it at this time.

Nerve takes advantage of Node.js’s built-in file watching abilities to monitor changes made by Dropbox and then regenerate pages on the fly. It asks you for a path to your Markdown file, but this can include asterisk wildcards so you can use as many files as the pattern matches. My entire blog is two Markdown files. One contains all posts from 2002 to 2010 and the other contains all posts from this year. The files look something like this:

This is a new post
==================

Blah blah blah.

This is another post [9/30/2011]
================================

Blah blah blah.

Nerve uses Markdown’s level-one header to demarcate the posts. It then looks for a bracketed timestamp in the header to distinguish posts that are public from ones that are still drafts. A password-protected drafts page allows me to preview drafts before publishing. Once they are done, I add the timestamp, save the file, and it’s published.

A previous version of Nerve required creating a separate file for each post and giving it a name that contained the timestamp. I tested this system out on Laura’s blog and found that the chore of creating new files was just enough friction to discourage her from starting new posts. One day I was talking to my friend, Dave Winer, and he told me that his entire blog is contained in a single OPML outline file. This was a big aha-moment for me, and I rewrote Nerve so that all posts could be within the same file. This was a big hit with Laura, and I’ve found her posting volume has gone up significantly ever since.

Caveats

The Dropbox Linux client works pretty well, but on a couple occasions I’ve found it has stopped syncing for no apparent reason. It’s not the end of the world. The web server keeps running, but new posts won’t get published until I SSH into my EC2 instance and restart the Dropbox daemon.

Linode CentOS / Debian 部署 ipsec+l2tpd 简要笔记 | gkp’s post

2010年7月17日更新:刚刚在 Debian 5.0 i386 上安装了一套,部分软件包和日志文件的名字不太一样,这种情况我在下面文档中都注明了。其他配置文件,编译等部分步骤完全一样。

因为联通和移动陆续封掉了 PPTP 数据包,所以之前在 VPS 跑的 PPTP 成为了摆设,于是考虑重新部署 ipsec+l2tpd 方案,使用的硬件环境为 Linode VPS ,CentOS 5.5 32bit / Debian 5.0 23bit,主要使用软件包: openswan + xl2ptd,使用源代码编译。所有命令请自行添加 sudo,我这里全部省略了。

第一步,安装 openswan,记得一定要用 2.6.24 这个版本,2.6.26和xl2tpd存在严重兼容性 bug,折腾了我好几天 囧

用 yum / Aptitude 安装编译所需软件包

CentOS:yum install make gcc gmp-devel bison flex

Debian: aptitude install libgmp3-dev bison flex

下载源代码并编译安装

cd /usr/src
wget http://www.openswan.org/download/openswan-2.6.24.tar.gz
tar zxvf openswan-2.6.24.tar.gz
cd openswan-2.6.24
make programs install

修改配置文件

vi /etc/ipsec.conf

内容

version 2.0
config setup
    nat_traversal=yes
    virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12
    oe=off
    protostack=netkey

conn L2TP-PSK-NAT
    rightsubnet=vhost:%priv
    also=L2TP-PSK-noNAT

conn L2TP-PSK-noNAT
    authby=secret
    pfs=no
    auto=add
    keyingtries=3
    rekey=no
    ikelifetime=8h
    keylife=1h
    type=transport
    left=YOUR.SERVER.IP.ADDRESS
    leftprotoport=17/1701
    right=%any
    rightprotoport=17/%any

设置 Shared Key

vi /etc/ipsec.secrets

内容

YOUR.SERVER.IP.ADDRESS %any: PSK "YourSharedSecret"

修改包转发设置

for each in /proc/sys/net/ipv4/conf/*
do
echo 0 > $each/accept_redirects
echo 0 > $each/send_redirects
done

vi /etc/sysctl.conf
修改 net.ipv4.ip_forward = 1
sysctl -p

重新启动 ipsec,并测试运行效果

/etc/init.d/ipsec restart
ipsec verify

如下即为正常工作

Checking your system to see if IPsec got installed and started correctly:
Version check and ipsec on-path                                 [OK]
Linux Openswan U2.6.24/K2.6.32.12-linode25 (netkey)
Checking for IPsec support in kernel                            [OK]
NETKEY detected, testing for disabled ICMP send_redirects       [OK]
NETKEY detected, testing for disabled ICMP accept_redirects     [OK]
Checking for RSA private key (/etc/ipsec.secrets)               [OK]
Checking that pluto is running                                  [OK]
Pluto listening for IKE on udp 500                              [OK]
Pluto listening for NAT-T on udp 4500                           [OK]
Two or more interfaces found, checking IP forwarding            [OK]
Checking NAT and MASQUERADEing                                  [OK]
Checking for 'ip' command                                       [OK]
Checking for 'iptables' command                                 [OK]
Opportunistic Encryption Support                                [DISABLED]

这个时候 ipsec 部分完成了,可以测试一下,新建一个 ipsec+l2tp 的连接,填好服务器地址和 SharedKey,点连接,注意看服务器那边的 /var/log/secure (CentOS) /var/log/auth.log(Debian),如果出现了类似

STATE_QUICK_R2: IPsec SA established transport mode

这样的日志就说明 ipsec 没问题了。如果你用 OS X,也可以看 /var/log/system.log |grep ppp,有类似

pppd[3624]: IPSec connection established

也是成功了

第二大部分,安装l2tp,这里我使用了xl2tpd。这东西有点变态,没有l2tp-control,需要从rp-l2tp这个里面提取。

安装需要的库和软件包

CentOS:yum install libpcap-devel ppp

Debian:aptitude install libpcap-dev ppp

Debian 的话,可能需要建立一个 ppp device node,命令为

mknod /dev/ppp c 108 0

下载编译安装

cd /usr/src
wget http://downloads.sourceforge.net/project/rp-l2tp/rp-l2tp/0.4/rp-l2tp-0.4.tar.gz
tar zxvf rp-l2tp-0.4.tar.gz
cd rp-l2tp-0.4
./configure
make
cp handlers/l2tp-control /usr/local/sbin/
mkdir /var/run/xl2tpd/
ln -s /usr/local/sbin/l2tp-control /var/run/xl2tpd/l2tp-control

cd /usr/src
wget  http://www.xelerance.com/software/xl2tpd/xl2tpd-1.2.4.tar.gz
tar zxvf xl2tpd-1.2.4.tar.gz
cd xl2tpd-1.2.4
make install

写配置文件

mkdir /etc/xl2tpd
vi /etc/xl2tpd/xl2tpd.conf

内容,注意 ip range 不要和你的 lan ip 冲突。。。

[global]
ipsec saref = yes

[lns default]
ip range = 10.1.2.2-10.1.2.254
local ip = 10.1.2.1
refuse chap = yes
refuse pap = yes
require authentication = yes
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes

ppp 配置文件

vi /etc/ppp/options.xl2tpd

内容

require-mschap-v2
ms-dns 8.8.8.8
ms-dns 8.8.4.4
asyncmap 0
auth
crtscts
lock
hide-password
modem
debug
name l2tpd
proxyarp
lcp-echo-interval 30
lcp-echo-failure 4

设置拨号用户名以及密码

vi /etc/ppp/chap-secrets

内容格式

# user      server      password            ip
username        l2tpd       userpass        *

启用包转发

iptables --table nat --append POSTROUTING --jump MASQUERADE

之后就可以启动 l2tp 了,先用 debug 方式启动,有错误可以直接在 console 看到

xl2tpd -D

把刚才建立的连接写上用户名和密码,华丽的点击 connect 吧!如果没问题的话,把包转发和xl2tpd启动指令设置为开机运行

vi /etc/rc.local

加入

iptables --table nat --append POSTROUTING --jump MASQUERADE
for each in /proc/sys/net/ipv4/conf/*
do
echo 0 > $each/accept_redirects
echo 0 > $each/send_redirects
done
/etc/init.d/ipsec restart
/usr/local/sbin/xl2tpd

大功告成!

2010年8月12日更新,PPP 验证部分可以使用 MySQL 数据库,请参考这篇文章

参考资料:

如果你遇到了问题,请在下面留言,我尽量回答。

(Visited 8,476 times, 36 visits today)

如何在 VPS 上搭建 L2TP/IPSec 简易教程

如之前所说,PPTP 类的 VPN 可以在 iPhone 手机上使用,但是不能在 Mac OS X 电脑系统上使用,于是,我需要使用 L2TP/IPSec (L2TP over IPSec,即在 IPSec 上搭建 L2TP) 类的 VPN。

这篇文章将介绍如何在 VPS (Xen)上搭建 L2TP/IPSec 类的 VPN,而你只需要一个 VPS 和一台可以上网的电脑。和 PPTP 的一样,L2TP/IPSec 的操作步骤也是基于 Mac 电脑的终端应用程序,对 Linux 系统来讲,步骤几乎是一模一样的,而对 Windows 用户来讲,则需要先安装一个叫 Putty 的软件。

顺便提一下,Xen VPS 的 Ubuntu 系统最好使用 11.04 版本的,因为其他较低的版本(例如 10.04)很可能不行。

How To Set Up A L2TP/IPSec VPN In A VPS

I、连接 VPS

打开终端应用程序并输入以下命令:

ssh root@xxx.xxx.xxx.xxx

记得将 "xxx.xxx.xxx.xxx" 替换成 VPS 的 IP 地址,例如 "178.18.17.30",然后回车就可以了。

P.S.:

如果在连接的过程中遇到问题,可以参考之前的 PPTP 教程。

II、安装 OpenSwan

虽然你可以通过输入 "aptitude install openswan" 命令直接安装 OpenSwan,但根据我分别在两个不同的 VPS 上测试的结果,这种方法已经无效,所以,最好还是直接从 OpenSwan 官方网站下载再安装,具体方法如下:

1、输入以下命令:

aptitude install build-essential

回车,输入 "y",再回车。

2、输入以下命令:

aptitude install libgmp3-dev gawk flex bison

回车,输入 "y",再回车。

3、输入以下命令:

wget http://www.openswan.org/download/openswan-2.6.35.tar.gz

回车。

4、输入以下命令:

tar xzvf openswan-2.6.35.tar.gz

回车。

5、输入以下命令:

cd openswan-2.6.35

回车。

6、输入以下命令:

make programs

回车。

7、输入以下命令:

make install

回车。到此,OpenSwan 就安装成功了。

备注:

a、2.6.35 是目前最新的版本,将来你可以访问 OpenSwan 官方网站看看有没有更新的版本,如有,不妨尝试一下。

b、文章中的所有命令都可以直接复制粘贴到终端应用程序。

III、编辑 IPSec

OpenSwan 是用来建 IPSec 的,而 IPSec 是用来建 L2TP 的。

1、输入以下命令:

vi /etc/ipsec.conf

回车,输入 "dG" 删除所有内容,按 "i" 键,然后复制并粘贴以下内容:

version 2.0
config setup
    nat_traversal=yes
    virtual_private=%v4:10.0.0.0/8,%v4:192.168.0.0/16,%v4:172.16.0.0/12,%v4:25.0.0.0/8,%v6:fd00::/8,%v6:fe80::/10
    oe=off
    protostack=netkey

conn %default
    forceencaps=yes

conn L2TP-PSK-NAT
    rightsubnet=vhost:%priv
    also=L2TP-PSK-noNAT

conn L2TP-PSK-noNAT
    authby=secret
    pfs=no
    auto=add
    keyingtries=3
    rekey=no
    ikelifetime=8h
    keylife=1h
    type=transport
    left=YOUR.VPS.IP.ADDRESS
    leftprotoport=17/1701
    right=%any
    rightprotoport=17/%any

记得将 YOUR.VPS.IP.ADDRESS 替换成自己 VPS 的 IP 地址,例如 178.18.17.30。替换方法如下:

按下"ESC" 键退出插入模式,将光标移到 "Y" 字母上,接着按下 "i" 键,输入 IP 地址,再按一下 "ESC" 键,并将光标移到 "YOUR.VPS.IP.ADDRESS" 上,然后按下 "x" 键把它们全部删除。或者你可以先把内容粘贴到记事本之类的编辑器上并修改好之后再复制粘贴到终端应用程序。

完了之后,输入 ":wq" 并回车保存所做的修改。

备注:

在 Vi 编辑模式下,你需要按 "i" 才能插入内容,完了之后,要按 "ESC" 退出插入模式和保存。

2、输入以下命令:

vi /etc/ipsec.secrets

回车,按 "i" 键并输入以下内容:

YOUR.VPS.IP.ADDRESS %any: PSK "YourSharedSecret"

例如:

178.18.17.30 %any: PSK "123456abcdef"

(小技巧:你需要按 Tab 键创建不同数值之间的空格。)

按 "ESC" 键,输入 ":wq",再回车保存。

3、一行一行地输入以下命令:

for each in /proc/sys/net/ipv4/conf/* do echo 0 > $each/accept_redirects echo 0 > $each/send_redirects done

每一行都要回车。

4、输入以下命令:

service ipsec restart

回车。

备注:

输入 "ipsec verify",回车,如果一切正确,你将会看到如下图所示的结果:

Ipsec verify

如果不是,则需要重新检查之前的操作步骤,特别是 "ipsec.conf" 的内容。

IV、安装 L2TP

基于 IPSec 的 L2TP 就是 VPN 了。

1、输入以下命令:

cd ..

回车以便进入 VPS 根目录。

2、输入以下命令:

aptitude install xl2tpd

回车,输入 "y",再回车。

3、输入以下命令:

vi /etc/xl2tpd/xl2tpd.conf

回车,输入 "dG" 删除所有的内容,按下 "i" 键,然后粘贴以下内容:

[global] ; listen-addr = 192.168.1.98

[lns default] ip range = 10.1.1.2-10.1.1.255 local ip = 10.1.1.1 require chap = yes refuse pap = yes require authentication = yes name = LinuxVPNserver ppp debug = yes pppoptfile = /etc/ppp/options.xl2tpd length bit = yes

按下 "ESC" 键,输入 ":wq",并回车保存。

V、创建 xl2tpd

这里假设你的 VPS 已经支持 PPP,如果没有,先输入 "aptitude install ppp" 命令安装 PPP。

1、输入以下命令:

vi /etc/ppp/options.xl2tpd

回车,按下 "i" 键,然后粘贴以下内容:

require-mschap-v2 ms-dns 8.8.8.8 ms-dns 8.8.4.4 asyncmap 0 auth crtscts lock hide-password modem debug name l2tpd proxyarp lcp-echo-interval 30 lcp-echo-failure 4

按下 "ESC" 键,输入 ":wq",并回车保存。

备注:

你可以将 8.8.8.8 和 8.8.4.4 替换成 208.67.222.222 和 208.67.220.220。

2、输入以下命令:

vi /etc/ppp/chap-secrets

回车,按下 "i" 键,并输入如下内容:

username l2tpd password *

例如:

freenuts l2tpd 123456 *

记得用 "tab" 键输入空格,用 ":wq" 保存文件。

3、输入以下命令:

service xl2tpd restart

回车。

VI、IP 转发

这个步骤将使你的 VPN 连接整个互联网。

1、输入以下命令:

vi /etc/sysctl.conf

回车,找到 "#net.ipv4.ip_forward=1" 这一行,接着按 "x" 键删除 "#" 号,然后输入 ":wq" 保存。

2、使转发生效:

sysctl -p

回车,如果一切正常,你将会只看到以下结果:

net.ipv4.ip_forward = 1

3、输入以下命令:

iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -o eth0 -j MASQUERADE

回车之后,你就可以连接自己的 L2TP/IPSec VPN 翻墙了,但是如果你重启 VPS 的话,就需要重新执行一次 iptables 命令,并重启 ipsec,为了避免这些,你只需要输入以下命令:

vi /etc/rc.local

并在 "exit 0" 这一行之前粘贴以下内容就可以了:

for each in /proc/sys/net/ipv4/conf/* do echo 0 > $each/accept_redirects echo 0 > $each/send_redirects done

iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -o eth0 -j MASQUERADE

/etc/init.d/ipsec restart

完了之后,你就可以尽情地享用自己搭建的 L2TP/IPSec VPN 了。

额外收获:

以下是根据上面的教程在 2host 的 Xen VPS 上搭建的 L2TP/IPSec VPN:

Server Address: 178.18.17.30 Account Name: freenuts Password: 123456 Shared Secret: 123456abcdef

这个 VPN 帐号会免费大概半个月,你可以参考这篇文章 在电脑或者手机上试用。

相关博文:

  1. 在 VPS 上搭建 OpenVPN 简易教程
  2. 如何在 VPS 上搭建 PPTP 简易教程
  3. 如何把 VPS 作为 SSH 代理翻墙
  4. 如何在 VPS 上安装 PHP
  5. 在 Nginx 平台上运行 PHP 的两种方法

PPP HOWTO 中译版: 建立连结之后 – /etc/ppp/ip-up 脚本文件

Next
Previous
Contents

23. 建立连结之后 – /etc/ppp/ip-up 脚本文件

一旦 PPP 连结建立後, pppd 会找寻 /etc/ppp/ip-up 脚本文件.
如果这个脚本文件存在并且可以执行的话,那么 PPP 服务程序就会执行这个脚本文件.
这允许你自动执行任何可能有必要的特殊递送路径指令及任何你想在每次 PPP 连结启动时执行的动作.

这不过就是一般普通的 shell 脚本文件,可以做任何脚本文件能做的事(也就是,任何你想做的事).

例如,你可能想要 sendmail 赶快处理在邮件队列中等待外送的讯息.

类似地,你可以在 ip-up 里插入一些指令取得(使用 POP)在你的 ISP 那边等著你的任何电子邮件.

不过在 /etc/ppp/ip-up 也有些限制:-

  • 它以局限的环境变量以增加安全性.这也就是说你必须给出执行档的全部路径名称等.
  • 技术上来说,/etc/ppp/ip-up 是一个程序而非脚本文件.
    这是说它可以被直接执行 – 也因此它在第一行开始必须具有标准的 file magic (#!/bin/bash) 并且能被 root 读取及执行.

23.1 特殊递送路径

如果你连结的是两个局域网,你将得设立一个到 ‘外面的’ 局域网的指定递送路径.
这可以很容易的使用 /etc/ppp/ip-up 脚本文件达成.唯一的困难发生在你的机器有多个 PPP 连结时.

这是因为 /etc/ppp/ip-up 这个脚本文件是由每一个起动的 ppp 连线所执行的,所以你得要小心地为每一个起动的连结执行正确的递送指令!

23.2 处理电子邮件队列

当两个局域网的连结建立之后,你可能想要确定放在队列中的电子邮件被清出 – 送到它的目的地.
这可以用适当的调用 sendmail 来达成.

在 pppd 传递给脚本文件的特定参数上使用 bash 的 `case’ 叙述来完成这个工作.
例如,这是我用来处理我们的广域网络连结及通往我家以太网络的(也是由相同的 PPP 服务器处理)/etc/ppp/ip-up 脚本文件.

23.3 一个 /etc/ppp/ip-up 脚本文件的例子

下面的例子提供不同的使用范例.

#!/bin/bash
#
# Script which handles the routing issues as necessary for pppd
# Only the link to Newman requires this handling.
#
# When the ppp link comes up, this script is called with the following
# parameters
#       $1      the interface name used by pppd (e.g. ppp3)
#       $2      the tty device name
#       $3      the tty device speed
#       $4      the local IP address for the interface
#       $5      the remote IP address
#       $6      the parameter specified by the 'ipparam' option to pppd
#
case "$5" in
# Handle the routing to the Newman Campus server
        202.12.126.1)
                /sbin/route add -net 202.12.126.0 gw 202.12.126.1
# and flush the mail queue to get their email there asap!
                /usr/sbin/sendmail -q &
                ;;
        139.130.177.2)
# Our Internet link
# When the link comes up, start the time server and synchronise to the world
# provided it is not already running
                if [ ! -f /var/lock/subsys/xntpd ]; then
                        /etc/rc.d/init.d/xntpd.init start &
                fi
# Start the news server (if not already running)
                if [ ! -f /var/lock/subsys/news ]; then
                        /etc/rc.d/init.d/news start &
                fi
                ;;
        203.18.8.104)
# Get the email down to my home machine as soon as the link comes up
# No routing is required as my home Ethernet is handled by IP
# masquerade and proxyarp routing.
                /usr/sbin/sendmail -q &
                ;;
        *)
esac
exit 0

起动通往我们 Newman 校园的 ppp 连结以及这个脚本文件的结果,我们最后得到下面这个递送表格记录(这台机器也是我们通常用的 PPP 服务器并且处理我们的互联网连结).
我已经在这个输出里加入一些注解以解释每个项目是什么:

[root@kepler /root]# route -n
Kernel routing table
Destination     Gateway         Genmask         Flags MSS    Window Use Iface
# the HOST route to our remote internet gateway
139.130.177.2   *               255.255.255.255 UH    1500   0      134 ppp4
# the HOST route to our Newman campus server
202.12.126.1    *               255.255.255.255 UH    1500   0       82 ppp5
# the HOST route to my home ethernet
203.18.8.104    *               255.255.255.255 UH    1500   0       74 ppp3
# two of our general dial up PPP lines
203.18.8.64     *               255.255.255.255 UH    552    0        0 ppp2
203.18.8.62     *               255.255.255.255 UH    552    0        1 ppp1
# the specific network route to the Newman campus LAN
202.12.126.0    202.12.126.1    255.255.255.0   UG    1500   0        0 ppp5
# the route to our local Ethernet (super-netting two adjacent C classes)
203.18.8.0      *               255.255.254.0   U     1500   0     1683 eth0
# the route to the loop back device
127.0.0.0       *               255.0.0.0       U     3584   0      483 lo
# the default route to the Internet
default         139.130.177.2   *               UG    1500   0     3633 ppp4

23.4 处理电子邮件

上一节提及如何处理外送的邮件 - 一旦连线建立之后简单地藉由清出邮件队列达成.

如果你执行连往广域网络的连结,你可以跟远端局域网的网络管理者协调请它们执行完全相同的动作.
例如,在我们的广域网络连结中 Newman 校园那一端的 /etc/ppp/ip-up 脚本文件看起来像:

#!/bin/bash
#
# Script which handles the routing issues as necessary for pppd
# Only the link to Hedland requires this handling.
#
# When the ppp link comes up, this script is called with the following
# parameters
#       $1      the interface name used by pppd (e.g. ppp3)
#       $2      the tty device name
#       $3      the tty device speed
#       $4      the local IP address for the interface
#       $5      the remote IP address
#       $6      the parameter specified by the 'ipparam' option to pppd
#
case "$5" in
        203.18.8.4)
                /usr/sbin/sendmail -q
                ;;
        *)
esac
exit 0

然而如果你只能使用动态 IP 号码方式的 PPP 连线连往你的 ISP,你得从在你 ISP 机器上的帐号取得你的电子邮件.
这通常是使用 POP(Post Office Protocol)协议来达成的.可以使用 `popclient’ 程序处理这个程序 - 而 ip-up 脚本文件也可以为你自动化这个程序.

简单地建立一个 /etc/ppp/ip-up 脚本文件,其中包含有起动 popclient 程序的适当指令.
在我执行 Red Hat Linux 的膝上型电脑上(任何旅行时我都带著它)是这样的

popclient -3 -c -u hartr -p <password> kepler.hedland.edu.au |formail -s procmail

你可以使用 slurp 或其它软件以相同的方式取得网络新闻,以及诸如此类的服务.
记得,ip-up 这个脚本文件只是个标准的 bash 脚本文件因此可以用来自动化当每次适当的 PPP 连结建立时需要完成的任何功能.

Next
Previous
Contents

Usage – chnroutes – 使用方法 – Scripts to generate special routes for china ips – Google Project Hosting

介绍

这几个脚本主要利用来自 http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest 的数据生成路由命令脚本, 让vpn客户端在进行连接的时候自动执行. 通过这些路由脚本, 可以让用户在使用vpn作为默认网络网关的时候, 不使用vpn进行对中国国内ip的访问, 从而减轻vpn的负担, 和增加访问国内网站的速度.

基本约定

在使用这些脚本之前, 请确保你在自己的电脑上已经成功配置好一个vpn连接(pptp 或者 openvpn), 并且让之以默认网络网关的方式运行, 这通常也是默认配置, 即vpn接入之后所有网络流量都通过vpn进行.

Openvpn

使用此法之前, 请确认openvpn版本是否为 v2.1 或者以上, 如果不是请参看下方不同系统关于openvpn部分的描述

客户端设置

本方法适用于使用openvpn v2.1或更高版本的用户. 因为openvpn v2.1比之前版本增加了一个名为max-routes的新参数, 通过设置该参数, 我们可以在配置文件里(服务端, 客户端)直接添加超过100条以上的路由信息. 具体设置步骤如下:

  1. 下载 chnroutes.py 文件
  2. 在命令行里执行 python chnroutes.py, 这将生成一个名为 routes.txt 的文本文件. 对于不想安装python的用户, 可以直接从项目下来列表里下载该文件. 它将会每月更新一次.
  3. 使用你喜欢的文本编辑器打开上述文件, 并把内容复制粘贴到openvpn配置文件的末尾
  4. 同时在openvpn配置文件的头部添加一句 max-routes num, 其中num是一个不小于文件routes.txt的行数的数字, 实际上因为还有一些服务器端push过来的路由信息, 所以保险起见可以用 routes.txt的行数加上50, 比如目前得到的routes.txt的行数是940, 你可以把数字设置为1000: max-routes 1000
  5. 修改完之后, 重新进行openvpn连接, 你可以用之前描述过的方法进行测试是否成功

以上方法在Mac OSX, Linux 和 Windows上测试通过. 但需要注意的是, 这里用到一个net_gateway的变量表示未连接openvpn前的网关地址, 但openvpn的文档里有说明这个不是所有系统都支持的, 如果发生这个情况, 可以修改一下生成脚本, 把net_gateway修改为你的局域网的网关地址. 对于windows 7 和 vista, OpenVPN的windows客户端可能需要设置Windows XP兼容模式才能使用, 安装文件要在属性选择中的兼容性选择Windows XP和以管理员的身份运行,安装好的运行文件也同样选择这两个选项。如果还是不能连接到VPN的网络,可以尝试在配置文件中加入:

route-method exeroute-delay 2

注意事项

  • 因为这些ip数据不是固定不变的, 尽管变化不大, 但还是建议每隔两三个月更新一次
  • 使用此法之后, 可能会导致google music无法访问, 这个其实是因为连上vpn之后, 使用的dns也是国外的, 国外dns对google.cn 解析出来的是国外的ip, 所以一个简单的解决方法是修改本机的hosts文件, 把国内dns解析出来的google.cn的地址写上去: 203.208.39.99 www.google.cn google.cn

PPTP

Mac OSX

  1. 下载 chnroutes.py
  2. 从终端进入下载目录, 执行python chnroutes.py -p mac, 执行完毕之后同一目录下将生成两个新文件’ip-up’和’ip-down’
  3. 把这两个文件copy到 /etc/ppp 目录, 并使用 sudo chmod a+x ip-up ip-down命令把它们设置为可执行
  4. 设置完毕, 重新连接vpn. 测试步骤同上.

Linux

  1. 下载 chnroutes.py
  2. 从终端进入下载目录, 执行python chnroutes.py -p linux, 执行完毕之后同一目录下将生成两个新文件’ip-pre-up’和’ip-down’.
  3. 把ip-pre-up 拷贝到 /etc/ppp目录, ip-down 拷贝到 /etc/ppp/ip-down.d 目录. 测试步骤同上.

Windows

  1. 下载 chnroutes.py
  2. 从终端进入下载目录, 执行python chnroutes.py -p win, 执行之后会生成vpnup.bat和vpndown.bat两个文件.

由于windows上的pptp不支持拨号脚本, 所以也只能在进行拨号之前手动执行vpnup.bat文件以设置路由表. 而在断开vpn之后, 如果你觉得有必要, 可以运行vpndown.bat把这些路由信息给清理掉.

如果机器上没有安装python, 可以直接从下载页面上下载已经预生成的bat文件.

Android

由于没在android上进行过测试, 无法确定上文描述的openvpn v2.1的使用方法是否也在android手机上适用, 所以保留以下内容

openvpn

  1. 下载 chnroutes.py
  2. 从终端进入下载目录, 执行python chnroutes.py -p linux, 这将生成’vpnup.sh’和’vpndown.sh’两个文件.
  3. 把步骤2生成的两个文件拷贝到 android 的 /sdcard/openvpn/目录下, 然后修改openvpn配置文件, 在文件中加上以上三句:
    script-security 2    up "/system/bin/sh /sdcard/openvpn/vpnup.sh"    down "/system/bin/sh /sdcard/openvpn/vpndown.sh"

注意自行修改其中的路径以符合你的android rom的实际路径

另外, 这里假定了你的android已经安装过busybox, 否则请先安装busybox再进行以上操作, 还需要知道的是, 这个脚本在手机上执行会花费比较长的时间, 如非必要, 就不要用了. 也许采用非redirect-gateway方式, 然后在ovpn配置文件里添加几条需要路由的ip段是比较快捷方便的做法.

基于Linux的第三方系统的路由器

一些基于Linux系统的第三方路由器系统如: OpenWRT, DD-WRT, Tomato 都带有VPN(PPTP/Openvpn)客户端的, 也就是说, 我们只需要在路由器进行VPN拨号, 并利用本项目提供的路由表脚本就可以把VPN针对性翻墙扩展到整个局域网. 当然, 使用这个方式也是会带来副作用, 即局域网的任何机器都不适合使用Emule或者BT等P2P下载软件. 但对于那些不使用P2P, 希望在路由器上设置针对性翻墙的用户, 这方法十分有用, 因为只需要一个VPN帐号, 局域网内的所有机器, 包括使用wifi的手机都能自动翻墙. 相信配置方式请参考: Autoddvpn 项目.

信息反馈

本项目的脚本都是在使用路由器进行拨号的情况下测试通过的, 如果在其它拨号方式下, 脚本不能运作, 请在本页添加comment说明. 或者添加一个新的issue. 另外, 在配合openvpn使用的时候, 可能会出现一种情况是因为网络质量不好, openvpn非主动断开, 这时候vpndown脚本也会被自动调用, 但重新连上之后, 可能会找不到默认的路由而添加失败, 这时候你可以通过停止openvpn重连, 并手动设置好原来的默认路由再重新进行openvpn拨号.

xream/iGV – GitHub

Wiki

Home

Basic Installation

Basic

Setup

Download the source code and unzip it.

Go to the folder where you download files to.

$ cp *.conf /usr/local/etc/

$ cp hosts /usr/local/etc/

$ cp *.sh /usr/local/etc/

$ sudo cp ip-up /etc/ppp/

$ sudo cp ip-down /etc/ppp/

$ sudo chmod a+x /etc/ppp/ip*

Clear your own hosts file /etc/hosts.

Edit /usr/local/etc/resolv.conf.

Change nameserver to your ISP’s DNS nameservers or you can use the 114DNS.

Like this:

nameserver 114.114.114.114
nameserver 114.114.115.115

Reboot.

Set the VPN DNS Server‎ to 127.0.0.1.

Dial up the VPN and enjoy! 😀