#!/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