用ssh跑pppd (最簡單的linux vpn )

來源:互聯網
上載者:User


用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居然這麼簡單 !
大家有什麼高見,還希望多多交流!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.