用ssh跑pppd (最简单的linux vpn )
用ssh跑pppd (最简单的linux vpn )
sbaa 2003.1.10
我为了通过封了udp包的防火墙上qq
试了很多办法
用snake的socks5代理不错,可以必须外网机器是 windows
而linux下,stunnel 只是转发tcp不支持qq 的 udp
于是我想到了vpn pptpd是个很不错的,支持windows的vpn客户端
可惜要防火墙开ip转发,也不满足我的要求,
今天看到一个ssh-ppp脚本,再看了一些文章,原来竟然这么简单!!
只要你有两台linux 外网上有sshd服务,你就可以透过防火墙
建立vpn !
我家拨号的机器adsl 是动态域名 sbaa.3322.org
我公司一台linux 内网的(10.9.0.16) 通过公司的网关nat 可以访问到 sbaa.3322.org的22(ssh)
两台机器上都有pppd 条件就ok!
开始:
在家里机器上
useradd vpn
ssh-keygen
Enter file in which to save the key (/root/.ssh/identity): vpnkey
现在有了vpnkey 和vpnkey.pub
配置 sshd /etc/ssh/sshd_config
打开 RSAAuthentication yes
cp vpnkey.pub /home/vpn/.ssh/authorized_keys
把下面内容加到/etc/sudoers
Cmnd_Alias VPN=/usr/sbin/pppd
vpn ALL=NOPASSWD: VPN
本机测试一下
sudo /usr/sbin/pppd noauth
~}#?}!}!} }4}"}&} } } } }%}&V鴠'}"}(}"~}#?}!}!} }4}"}&} } } } }%}&V鴠'}"}(}"~}#?}!}!} }4}"}&} } } } }%}&V鴠'}"}(}"~}#?}!}!} }4}"}&} } } } }%}&V鴠'}"}(}"~}#?}!}!} }4}"}&} } } } }%}&V鴠'}"}(}"~}#?}!}!} }4}"}&} } } } }%}&V鴠'}"}(}"~}#?}!}!} }4}"}&} } } } }%}&V鴠'}"}(}"~}#?}!}!} }4}"}&} } } } }%}&V鴠'}"}(}"~}#?}!}!} }4}"}&} } } } }%}&V鴠'}"}(}"~}#?}!}!} }4}"}&} } } } }%}&V?
就ok
好了
到公司机器上,把刚才的vpnkey ftp 过来
测一下
看到提示符登录成功一切就ok了
ssh -l vpn -i ./vpnkey -1 -P sbaa.3322.org
Linux 2.2.14.
cool:~$ exit
logout
Connection to sbaa.3322.org closed.
建立以下脚本
vpnstart
#!/bin/sh
# VPN PPP-SSH script
# History
# 16 May 2002 j.n.pritchard@brad.ac.uk
# *******************************************
# You will need to edit in these varibles
# Server Hostname
SERVER_HOSTNAME=sbaa.3322.org
# Username on the server for VPN
SERVER_USERNAME=vpn
# SSH Private Key Location
PRIVATE_KEY_FILE=/home/bin_shi/vpnkey
# *******************************************
# You do NOT need to edit below this line unless you use the subnet 192.168.250
# VPN Network subnet (change to a different subnet if this one is in use)
VPN_SUBNET=192.168.6
# Server ppp address
SERVER_IFIPADDR=$VPN_SUBNET.1
# Client ppp address
CLIENT_IFIPADDR=$VPN_SUBNET.2
# Extra SSH Options
LOCAL_SSH_OPTS="-P -1 -i $PRIVATE_KEY_FILE"
# Path environment
PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/sbin:/usr/X11/bin
# Command Alias'
PPPD=/usr/sbin/pppd
SSH=/usr/local/bin/ssh
if ! test -f $PPPD ; then echo "can't find $PPPD"; exit 3; fi
if ! test -f $SSH; then echo "can't find $SSH" ; exit 4; fi
case "$1" in
start)
# echo Starting VPN Connection
$ updetach noauth passive pty "$ $ $ -l$ -o Batchmode=yes sudo $ nodetach notty noauth" ipparam vpn $:$
# echo "connected."
;;
stop)
# echo -n "Stopping vpn to $SERVER_HOSTNAME: "
PID=`ps ax | grep "$ $ $ -l$ -o" | grep -v ' passive ' | grep -v 'grep ' | awk '{print $1}'`
if [ "$" != "" ]; then
kill $PID
echo "disconnected."
else
echo "Failed to find PID for the connection"
fi
;;
config)
echo "SERVER_HOSTNAME=$SERVER_HOSTNAME"
echo "SERVER_USERNAME=$SERVER_USERNAME"
echo "SERVER_IFIPADDR=$SERVER_IFIPADDR"
echo "CLIENT_IFIPADDR=$CLIENT_IFIPADDR"
*)
echo "Usage: vpn "
exit 1
;;
esac
exit 0
有些配置你可以自己改改
然后./vpnstart start
呵呵
ifconfig -a 看到 192.168.6.2了吗
ping 192.168.6.1 就是我的 sbaa.3322.org了
不错
在sbaa.3322.org上加
route add -net 10.9.0.0 netmask 255.255.248.0 gw 192.168.6.2
然后到我公司的windows机器上加
route add 192.168.6.1 mask 255.255.255.255 10.9.0.16
ping 192.168.6.1 哦卡 通的
然后qq上我的sbaa.3322.org 的socks5代理
呵呵upd包在ssh的链路里被加密封装了
防火墙被穿过了。
这个办法真好!可惜不是我自己发现的,我也是看到网上有ssh-ppp脚本
再研究了一下
呵呵!
linux上的vpn居然这么简单 !
大家有什么高见,还希望多多交流!