本文将介绍以pptp方式拨入虚拟网络的VPN的方法。
以下操作均在root用户下操作完成,并假设你的Linux系统已经安装了编译环境。
1、下载pptp客户端
wget http://nchc.dl.sourceforge.net/sourceforge/pptpclient/pptp-1.7.1.tar.gz
2、解压
tar zxvf pptp-1.7.1.tar.gz
3、编译和安装
make && make install
4、编辑配置文件,设定拨号名为guozi
vim /etc/ppp/peers/guozi
内容如下:
remotename guozi
linkname guozi
ipparam guozi
pty "pptp www.hifyl.com --nolaunchpppd "
name guozi
usepeerdns
require-mppe
refuse-eap
noauth
其中,myaccount为用户名
5、编辑/etc/ppp/chap-secrets
加入用户名和帐号,这里假设myaccount的密码为mypassword
myaccount * mypassword *
6、拨号,运行以下命令
/usr/sbin/pppd call guozi logfd 1 updetach
如果以上配置文件正确无误,则可正常拨入虚拟网管的pptp VPN网络中了,此时如果用ifconfig查看连接情况,可以看到多了一条ppp0的连接,并能正确分到IP地址了。
7、添加路由
虽然已经拨号上来了,但此时你可能无法正常访问你的你的虚拟局域网资源了,你必需添加一条路由才行,这里假设你拨号上来的连接名为ppp0,并此你的虚拟局域网的IP段为192.168.1.0,那么,你需要加入以下命令:
route add -net 192.168.1.0 netmask 255.255.255.0 dev ppp0
至此,在Linux系统下以pptp方式拨入虚拟网络的VPN网络中了。下面将附上一键安装脚本pptp.sh(为了简单起见,有些不存在的目录可能没做出错处理,读者可自行添加容错代码)。
#!/bin/bash # centos pptp client set # Made by Guozi QQ:411239339 pptp_server='' pptp_user='' pptp_pass='' device_name='' pwd_dir='' function read_cfg() { echo "======VPN client ======" while [ -z pptp_server ] do read -p "Please input your server ip; " pptp_server done echo -e "Your server ip is: pptp_server" while [ -z pptp_user ] do read -p "Please input your account: " pptp_user done echo -e "Your user name is: pptp_user" while [ -z pptp_pass ] do read -p "Please input your password; " pptp_pass done echo -e "Your password is: pptp_pass" read -p "Please input device name(Default eth0):" device_name [ -z device_name ] && device_name="eth0" } function test_network() { echo -e "Network testing" ping -c 4 nchc.dl.sourceforge.net >/dev/null if [ ! ? = 0 ];then echo "Network is broken Please check your Network settings" exit 1 else echo "Network is OK continue!" fi } function compile() { if [ -d /root/pptp ]; then echo -e "Vpn client was installed!!!" else echo "downloading Vpn install packet......" mkdir /root/pptp cd /root/pptp wget http://nchc.dl.sourceforge.net/project/pptpclient/pptp/pptp-1.7.1%20\(stable\)/pptp-1.7.1.tar.gz echo "downloaded success" tar -zxvf pptp-1.7.1.tar.gz cd pptp-1.7.1 make && make install echo "Vpn client installed success!" fi cd pwd_dir } function create_configure() { head -n 1 /etc/ppp/peers/pptp_user | grep pptp_user >/dev/nul 2>&1 if [ ! ? = 0 ];then cat >>/etc/ppp/peers/pptp_user <<EOF remotename pptp_user linkname pptp_user ipparam pptp_user pty "pptp pptp_server --nolaunchpppd " name pptp_user usepeerdns require-mppe refuse-eap noauth EOF fi cat /etc/ppp/chap-secrets | grep pptp_user >/dev/nul 2>&1 if [ ! ? = 0 ];then echo "\"pptp_user\" * \"pptp_pass\" *" >>/etc/ppp/chap-secrets fi if [ ! -f /usr/sbin/poff ];then cp ./pon /usr/sbin cp ./poff /usr/sbin/ chmod 701 /usr/sbin/poff fi } function add_route() { ip_seg=(ifconfig device_name | grep "inet addr" | awk -F: '{print 2}' | awk '{print 1}') ip_seg=(echo ip_seg | awk 'BEGIN{FS=".";OFS="."}{print 1,2,3,0}') mask=(ifconfig device_name | grep "Mask" | awk -F: '{print 4}' | awk '{print 1}') ifconfig ppp0 2&amp;gt;&amp;amp;1 | grep "RUNNING" > /dev/nul if [ ! ? = 0 ];then /usr/sbin/pppd call pptp_user logfd 1 updetach route add -net ip_seg netmask 255.255.255.0 dev ppp0 sleep 1 else poff > /dev/nul 2>&1 echo -e "" echo -e "vpn was disconnected!!!" echo -e "" fi } read_cfg test_network compile create_configure #add_route
下面是用于一健拨号的脚本pon,很简单,就几行代码:
#!/bin/bash
pptp_user=$1
[ -z $pptp_user ] && echo "Example:pon user_name!" && exit 1
/usr/sbin/pppd call $pptp_user logfd 1 updetach
下面是用于断开拨号的脚本poff:
#!/bin/sh if [ -x /usr/bin/kill ]; then KILL="/usr/bin/kill" else KILL="/bin/kill" fi SIG=TERM DONE="stopped" MODE="" usage () { cat <<!EOF! usage: 0 [option] [provider] options: -r Cause pppd to drop the line and redial. -d Toggle the state of pppd's debug option. -c Cause pppd to renegotiate compression. -a Stop all pppd's. 'provider' will be ignored. -h Print this help summary and exit. -v Print version and exit. none Stop pppd. Options may not be combined. If 'provider' is omitted pppd will be stopped or signalled if and only if there is exactly one running unless the '-a' option was given. If 'provider' is supplied the pppd controlling the connection to that provider will be stopped or signalled. !EOF! } # Get option. If there are none replace the "?" that getopts puts in # FLAG on error with "null". getopts rdcavh FLAG if [ "?" -ne 0 ]; then FLAG="null" fi # Check for additional options. Should be none. getopts :rdcavh DUMMY if [ "?" -eq 0 ]; then echo "0: Illegal option -- {OPTARG}." exit 1 fi case FLAG in "r") SIG=HUP; DONE=signalled; shift ;; "d") SIG=USR1; DONE=signalled; shift ;; "c") SIG=USR2; DONE=signalled; shift ;; "a") MODE="all"; shift ;; "v") echo "0Revision: 1.1 _TrickToPrint_RCS_Revision"; exit 0 ;; "h") usage; exit 0 ;; "?") exit 1; esac # Get the PIDs of all the pppds running. Could also get these from # /var/run, but pppd doesn't create .pid files until ppp is up. PIDS=`pidof pppd` # poff is pointless if pppd isn't running. if test -z "PIDS"; then echo "0: No pppd is running. None {DONE}." exit 1 fi # Find out how many pppd's are running. N=`echo "PIDS" | wc -w` # If there are no arguments we can't do anything if there is more than one # pppd running. if test "#" -eq 0 -a "N" -gt 1 -a FLAG != "a" ; then echo "0: More than one pppd running and no "-a" option and no arguments supplied. Nothing {DONE}." exit 1 fi # If either there are no arguments or '-a' was specified kill all the # pppd's. if test "#" -eq 0 -o "MODE" = "all" ; then KILL -SIG PIDS || { echo "0: KILL failed. None {DONE}." exit 1 } exit 0 fi # There is an argument, so kill the pppd started on that provider. PID=`ps axw | grep "[ /]pppd call 1 *\$" | awk '{print 1}'` if test -n "PID" ; then KILL -SIG PID || { echo "0: KILL failed. None {DONE}." exit 1 } else echo "0: I could not find a pppd process for provider '1'. None {DONE}." exit 1 fi exit 0
使用方法:
先把上面三个脚本,分别为pptp.sh, pon poff,创建好后,运行如下命令即可创建一个已经建立好连接的接口ppp0:
chmod a+x pptp.sh ./pptp.sh
连接的方法:
#这里假设你的连接名为guozi
pon guozi
断开拨号的方法,直接运行如下命令:
poff -a
(全文完)
- 微信扫码赞助
- 支付宝赞助
来自外部的引用: 1