#!/bin/bash

if [ "$UID" != "0" ]; then
    echo "please use sudo to run $0"
    exit 1
fi

if [ "$#" != "5" ]; then
    echo "Usage: (5 parameters)"
    echo "    $0 localip remoteip username password networkSegment/NetMask"
    echo ""
    echo "  such as: $0 192.168.1.1 192.168.1.1-254 tmp tmp 192.168.1.0/24"
    echo "           $0 192.168.1.1 10.0.0.2-130 myuser mypassword 10.0.0.0/24"
    exit 1
fi

which pptpd > /dev/null
if [ "$?" != "0" ]; then
    apt-get install -y pptpd
fi

# 1. config /etc/pptpd.conf
sed -i "s%localip%#local_old_ip%g" /etc/pptpd.conf
sed -i "s%remoteip%#remote_old_ip%g" /etc/pptpd.conf
echo "localip $1" >> /etc/pptpd.conf # 这个就是你当前主机的IP地址
echo "remoteip $2" >> /etc/pptpd.conf # 这个就是给client分配置的IP地址池

# 2. 加入DNS , config /etc/ppp/options
sed -i "s%ms-dns%#old-dns%g" /etc/ppp/options
echo "ms-dns 114.114.114.114" >> /etc/ppp/options
echo "ms-dns 10.0.101.10" >> /etc/ppp/options
echo "ms-dns 8.8.8.8" >> /etc/ppp/options

# 3. 加入server名称 /etc/ppp/pptpd-options
# sed -i "s%name pptpd%name $1%g" /etc/ppp/pptpd-options
sed -i "s%name%#na_me%g" /etc/ppp/pptpd-options
echo "name $1" >> /etc/ppp/pptpd-options
echo "logfile /var/log/pptp.log" >> /etc/ppp/pptpd-options

# 4. 服务端的username和password的配置 /etc/ppp/chap-secrets
#(位置):
#  username server名(可设置为*) password 同意登入的ip(可设置为*)
echo "\"$3\"    $1  \"$4\"  *" >> /etc/ppp/chap-secrets
# such as: "tmp" 192.168.1.1 "tmp" *

# 5. 查看执行的port
# netstat -tnlpu | grep pptpd
# pptp port是tcp1723,能够看到1723port开户
echo 1 > /proc/sys/net/ipv4/ip_forward #改动内核设置,使其支持转发
# 要想永久生效,使其支持转发的话
# config /etc/sysctl.conf
#echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf # 将后面值改为1,然后保存文件
sed -i "s%net.ipv4.ip_forward=1%#net_old_.ipv4.ip_forward = 1%g" /etc/sysctl.conf # 将后面值改为1,然后保存文件
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf # 将后面值改为1,然后保存文件
sysctl -p # 立即生效

# 6. 第四步打开port转发后,路由器port转发
# 转发本地tcp1723port就可以

# 7. 不加这条仅仅能訪问内网资源,加了可訪问外网
# iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s $5 -o eth0 -j MASQUERADE
# 7.1 出如今openwrt无法上网
# 默认在OpenWrt中安装pptpd并设置好后,尽管能通过vpn连接上,可是连上之后无法通过路由器上网。网上有人说在iptables中添加POSTROUTING的masquerade的规则,经老衲測试,没有效果。
#经重复摸索,发现client拨完vpn后,上网时的包都被rst掉了,于是想到应该是防火墙在搞鬼。
#看了下iptable,还真是复杂,添加了好几个链。想来想去应该是在FORWORD链中有名堂,于是加了条规则,发现最终能够上网了。甚喜,遂来分享之。
# iptables -A forwarding_rule -s 10.1.56.0/24 -j ACCEPT
iptables -A forwarding_rule -s $5 -j ACCEPT

# 8. 可能问题1:连接过程中无法通过帐号password验证,logfile显示:pppd[26133]: Couldn’t open the /dev/ppp device: No such file or directory
# 确少/dev/ppp
ls /dev/ppp
if [ "$?" != "0" ]; then
    mknod /dev/ppp c 108 0
fi

# 8. 重新启动pptpd服务否则client获取的IP段不生效
/etc/init.d/pptpd restart

exit 0

Ubuntu自己主动搭建VPN Server - PPTP的Shell脚本的更多相关文章

  1. AWS 搭建 VPN 服务(PPTP & L2TP) 整理

    只为记录和整理在AWS上假设VPN服务器帮助过我的资料,环境使用AWS EC2 东京区域, OS为ubuntu, PPTP和L2TP各自建立一个, 从speed test上看, 下载有2mbps左右, ...

  2. Ubuntu14.04下搭建VPN服务 -pptp

    在Ubantu下采用PPTP搭建VPN,优点是配置简单快捷.本教程亲自测试,熟练了在新机器上5分钟搞定VPN. - - - - - - - - - - - - - - - - - - - - - - ...

  3. 通过openswan基于Azure平台搭建VPN server

    用过Azure的读者都知道,Vnet一直是Azure比较自豪的地方,尤其是VPN,Azure提供了两种VPN以及专线来保证客户数据的安全性,S2S vpn(站点到站点的,基于IPsec的),P2S v ...

  4. SQL Server 中执行Shell脚本计算本地文件的内容大小

    SQL Server 数据库中除了能执行基本的SQL语句外,也可以执行Shell脚本.默认安装后,SQL中的Shell脚本的功能是关闭的,需要手动打开, 执行以下脚本即可打开该功能. -- 允许配置高 ...

  5. 【转】在ubuntu环境下搭建svn server遇到的一些问题

    原文网址:http://www.cnblogs.com/pcchinadreamfly/archive/2012/11/24/2786046.html 前段时间在ubuntu 12.04lts上倒腾了 ...

  6. Ubuntu 14.04 在桌面上双击运行shell 脚本文件

    http://askubuntu.com/questions/465531/how-to-make-a-shell-file-execute-by-double-click up vote7down ...

  7. 在Ubuntu 15下搭建V/P/N服务器pptpd安装和配置

    在Ubuntu 15下搭建VPN服务器pptpd安装和配置 在ubuntu下配置vpn的方式有很多种,其中比较常见的是pptpd,它配置简单,但是安全性不高,不过对于一般使用来说足够了,我按照程搭建了 ...

  8. Ubuntu中shell脚本无法使用source命令的原因与解决方法

    本文简要描述了在ubuntu系统下无法使用source命令的原因,及对应的两种解决方法,并在附录中引用一篇文章来详细解释source命令的用法 问题: 由于在交叉编译时,需要在当前shell内执行so ...

  9. Ubuntu系统下搭建PPTP类型VPN环境

    step1: 安装pptpd 很简单的命令:sudo apt-get install pptpd step2: 修改pptpd的配置 有三个文件需要修改: (1)修改/etc/pptpd.conf,添 ...

随机推荐

  1. MemCache分布式内存对象缓存系统

    MemCache超详细解读 MemCache是一个自由.源码开放.高性能.分布式的分布式内存对象缓存系统,用于动态Web应用以减轻数据库的负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而 ...

  2. innerHTML使用方法

    使用方法: 比方在<body>中写了例如以下的代码:<div id=top></div> 如今用top.innerHTML="..........&quo ...

  3. MVC常用特性

    MVC常用特性使用   简介 在以前的文章中,我和大家讨论如何用SingalR和数据库通知来完成一个消息监控应用. 在上一篇文章中,我介绍了如何在MVC中对MongoDB进行CRUD操作. 今天,我将 ...

  4. VS公布 错 到文件失败 复制到

    他自己和构建网站 ASP.MVC4 最近更改写功能 自此从未公布 已经报道 错 15 到文件失败 easyui\themes\gray\images\Thumbs.db  拷贝到 obj\Releas ...

  5. 从源代码分析modelDriven拦截器和params拦截器和拦截器prepare 和paramsPrepareParamsStack拦截器栈(让你的Struts2代码更简洁——如何培养框架设计能力

    源代码文件:Web App Libraries/struts2-core-2.3.15.3.jar/struts-default.xml 拦截器modelDriven: <interceptor ...

  6. [LeetCode] Longest Palindrome Substring 具体分析

    Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...

  7. 【BZOJ3627】【JLOI2014】路径规划 分层图

    意甲冠军:要查找.有门户网站:http://www.lydsy.com/JudgeOnline/problem.php? id=3627 注意:点的等待时长示意图为: 非常清晰了吧?没事,不清晰就不清 ...

  8. 【翻译】在Ext JS 5应用程序中怎样使用路由

    原文:How to Use Routing in Your Ext JS 5 Apps 简单介绍 Ext JS 5是一个重要的公布版本号,它提供了很多新特性来创建丰富的.企业级的Web应用程序.MVV ...

  9. ArcGIS for Silverlight 地图卷帘

    原文:ArcGIS for Silverlight 地图卷帘 ArcGIS 地图卷帘 for Silverlight 地图卷帘,其实就是遮罩的效果,在Silverlight里实现这样的效果,对于熟悉S ...

  10. 详细解释VB连接access几种方法数据库

    在VB中,连接ACCESS数据库的方法主要有以下三种 使用ADO对象,通过编写代码訪问数据库 Connection 对象 ODBC数据源 使用ADO Data 控件高速创建数据库连接 有三种连接方法 ...