Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/sh
- # Login Info
- PPTP_USER=<vpn_user_name>
- PPTP_PASSWORD=<vpn_password>
- # PPTP Server Info
- PPTP_DOMAIN=<vpn_domain>
- PPTP_SERVER=<vpn_server_name_or_ip>
- PPPD_OPTIONS=
- DEF_GATEWAY=No
- ADD_SUBNETS=<vpn_extra_subnets_space_delimited> # for example, "192.168.100.0 192.168.101.0"
- # this is needed if you're not using default gateway from VPN network,
- # and your VPN network has multiple subnets.
- UNIT=5 # anything but 0
- # Do not change anything below unless you know what you're doing...
- SCRIPTS_PATH=/tmp/ppp/ppp${UNIT}
- FIRE_PATH=/tmp/config
- DNSMASQ_CUSTOM=/etc/dnsmasq.custom
- TMPF=/tmp/$(date '+%y%d%m%H%M%S')
- _up()
- {
- echo "IP-UP"
- if [ x$IFNAME == x ]; then
- return 0
- fi
- echo $IFNAME > $SCRIPTS_PATH/link
- ifconfig $IFNAME arp multicast up
- nvram set ppp${UNIT}_get_ip=$IPLOCAL
- nvram set ppp${UNIT}_gateway=$IPREMOTE
- echo "rebind-domain-ok=$PPTP_DOMAIN" > $TMPF
- echo "server=/$PPTP_SERVER/#" >> $TMPF
- [ -n $DNS1 ] && echo "server=/$PPTP_DOMAIN/$DNS1" >> $TMPF
- # configure routes via remote gateway
- if [ x$IPREMOTE != x ]; then
- # delete existing routes
- route del default dev $IFNAME
- route del $IPREMOTE dev $IFNAME
- # add routes to the gateway and to itself
- route add $IPREMOTE metric 0 dev $IFNAME
- route add $IPLOCAL metric 0 dev $IFNAME
- # add routes to DNS servers
- [ -n $DNS1 ] && route add $DNS1 gw $IPREMOTE metric 0 dev $IFNAME
- [ -n $DNS2 ] && route add $DNS2 gw $IPREMOTE metric 0 dev $IFNAME
- # add route to the gateway subnet
- route add -net ${IPREMOTE%'.'*}.0 gw $IPREMOTE netmask 255.255.255.0 metric 0 dev $IFNAME
- # default gateway
- metric=1
- if [ "$DEF_GATEWAY" == "Yes" ]; then
- metric=0
- fi
- route add default gw $IPREMOTE metric $metric dev $IFNAME
- # add routes to additional subnets if any
- for subnet in $ADD_SUBNETS
- do
- route add -net $subnet gw $IPREMOTE netmask 255.255.255.0 metric 0 dev $IFNAME
- done
- # remove route to the gateway - no longer needed
- route del $IPREMOTE dev $IFNAME
- fi
- # firewall script
- mkdir -p $FIRE_PATH
- echo '#!/bin/sh
- if [ -f /var/run/ppp'$UNIT'.pid ] && [ -n $(cat /var/run/ppp'$UNIT'.pid) ]; then
- iptables -t nat -A PREROUTING -i '$IFNAME' -d '$(nvram get lan_ipaddr)'/'$(nvram get lan_netmask)' -j DROP
- iptables -t nat -A POSTROUTING -o '$IFNAME' -j MASQUERADE
- iptables -A FORWARD -i '$IFNAME' -j wanin
- iptables -A FORWARD -o '$IFNAME' -j wanout
- iptables -A FORWARD -i '$IFNAME' -j upnp
- fi
- ' > "$FIRE_PATH/ppp$UNIT.fire"
- chmod +x "$FIRE_PATH/ppp$UNIT.fire"
- mv -f $TMPF $DNSMASQ_CUSTOM
- service routing restart
- service dnsmasq restart
- service firewall restart
- }
- _down()
- {
- echo "IP-DOWN"
- nvram unset ppp${UNIT}_get_ip
- nvram unset ppp${UNIT}_gateway
- rm -f $FIRE_PATH/ppp$UNIT.fire
- rm -f $SCRIPTS_PATH/link
- echo "" > $DNSMASQ_CUSTOM
- service routing restart
- service dnsmasq restart
- service firewall restart
- }
- _stop()
- {
- echo "Stopping pppd$UNIT..."
- killall ppp$UNIT-up
- killall ppp$UNIT-down
- [ -f /var/run/ppp$UNIT.pid ] && kill $(cat /var/run/ppp$UNIT.pid)
- }
- _write_config()
- {
- mkdir -p $SCRIPTS_PATH
- [ -x "$SCRIPTS_PATH/ppp$UNIT-up" ] || echo '#!/bin/sh
- '$0' up' > "$SCRIPTS_PATH/ppp$UNIT-up"
- chmod +x "$SCRIPTS_PATH/ppp$UNIT-up"
- [ -x "$SCRIPTS_PATH/ppp$UNIT-down" ] || echo '#!/bin/sh
- '$0' down' > "$SCRIPTS_PATH/ppp$UNIT-down"
- chmod +x "$SCRIPTS_PATH/ppp$UNIT-down"
- echo " unit $UNIT
- usepeerdns
- plugin pptp.so
- pptp_server $PPTP_SERVER
- user '$PPTP_USER'
- password '$PPTP_PASSWORD'
- default-asyncmap
- nopcomp
- noaccomp
- novj
- nobsdcomp
- nodeflate
- noauth
- refuse-eap
- maxfail 0
- ip-up-script '$SCRIPTS_PATH/ppp$UNIT-up'
- ip-down-script '$SCRIPTS_PATH/ppp$UNIT-down'
- lcp-echo-interval 15
- lcp-echo-failure 6
- lcp-echo-adaptive
- persist
- holdoff 20
- nomppe-stateful
- mtu 1400" > "$SCRIPTS_PATH/options"
- }
- _start()
- {
- echo "Starting pppd$UNIT..."
- pppd file "$SCRIPTS_PATH/options"
- }
- case $1 in
- start)
- _stop
- sleep 2
- _write_config
- _start
- ;;
- stop)
- _stop
- ;;
- up)
- _up
- ;;
- down)
- _down
- ;;
- config)
- _write_config
- ;;
- *)
- echo "usage: $0 (start|stop|up|down|config)"
- exit 1
- esac
- exit $?
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement