歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

IT零起步-CentOS6.4部署PPTPVPN服務器

在介紹pptp VPN之前我們先來了解一下隧道技術。隧道技術的基本過程是在源局域網與公網的接口處將數據(可以是ISO 七層模型中的數據鏈路層或網絡層數據)作為負載封裝在一種可以在公網上傳輸的數據格式中,在目的局域網與公網的接口處將數據解封裝,取出負載。被封裝的數據包在互聯網上傳遞時所經過的邏輯路徑被稱為“隧道”。

目前VPN隧道協議有4種:點到點隧道協議PPTP、第二層隧道協議L2TP、網絡層隧道協議IPSec以及SOCKSv5,我們這裡只介紹點到點隧道協議PPTP。

一、PPTP協議原理

PPTP使用一個TCP連接對隧道進行維護,使用通用路由封裝(GRE)技術把數據封裝成PPP數據幀通過隧道傳送。可以對封裝PPP幀中的負載數據進行加密或壓縮。

下邊簡單描述PPTP 過程中涉及的封裝和解封步驟。

封裝

1.數據封裝於IP(或IPX和NetBEUI)封包中。

2.該IP(或IPX和NetBEUI)封包封裝在PPP幀中。

3.該PPP幀封裝在GRE 幀中(並加密)。

4.該GRE幀封裝在IP 封包中。

解封

1.移除IP包頭。

2.移除GRE包頭(解密過程)。GRE負載中是一個PPP幀。

3.移除PPP包頭。

4.將該IP(或IPX和NetBEUI)封包路由到其最終的目的地。

MPPE將通過由MS-CHAP、MS-CHAP v2或EAP-TLS身份驗證過程所生成的加密密鑰對PPP幀進行加密。為對PPP幀中所包含的有效數據進行加密,虛擬專用網絡客戶端必須使用MS-CHAP、MS-CHAP v2或EAP-TLS身份驗證協議。PPTP將利用底層PPP加密功能並直接對原先經過加密的PPP幀進行封裝。

PPTP協議將控制包與數據包分開,控制包采用TCP控制,客戶端連接到VPN服務器TCP1723端口,用於控制和管理VPN隧道的功能;數據包部分先封裝在PPP協議中,然後封裝到GRE V2協議中,最後封裝到IP協議中傳送。

因業務需要,公司員工需要通過VPN訪問國外網站,便有了以下安裝實例。

二、PPTP VPN安裝前的准備

\

環境:CentOS release 6.4 (Final) i386

協議:GRE,PPTP

端口:PPTP/TCP/1723(服務端), GRE/TCP/47

加密:MPPE(微軟點對點加密協議,實現數據鏈路層的機密性保護)

認證:MS-CHAP v2

服務:pptpd

軟件包:

(1). ppp-2.4.5-33.0.rhel6.i686.rpm

PPTP需要PPP的支持,一般情況下linux系統都已安裝有PPP軟件包,最好安裝較新的ppp軟件包,用Uvh這個參數來更新系統的PPP組件。也可以用#yum -y install ppp命令安裝。

(2). pptpd-1.4.0-1.el6.i686.rpm (pptpd服務端軟件)

(3). dkms-2.0.17.5-1.noarch.rpm CentOS6x/RHEL6x(內核支持mppe)不用安裝

DKMS全稱是Dynamic Kernel ModuleSupport,它可以幫我們維護內核外的這些驅動程序,在內核版本變動之後可以自動重新生成新的模塊。

(4). kernel_ppp_mppe-1.0.2-3dkms.noarch(MPPE的內核補丁),CentOS6x/RHEL6x(內核支持mppe)不用安裝

(5). pptp-release-4-7.rhel6.noarch.rpm (pptpd yum倉庫包,安裝後可用#yum -y install pptpd命令來安裝pptpd)

下載地址:

http://poptop.sourceforge.net/yum/stable/rhel6Server/i386/dkms-2.0.17.5-1.noarch.rpm

http://poptop.sourceforge.net/yum/stable/rhel6Server/i386/pptpd-1.4.0-1.el6.i686.rpm

http://poptop.sourceforge.net/yum/stable/rhel6Server/i386/pptp-release-4-7.rhel6.noarch.rpm

http://poptop.sourceforge.net/yum/stable/rhel6Server/i386/ppp-2.4.5-33.0.rhel6.i686.rpm

http://poptop.sourceforge.net/yum/stable/rhel6Server/i386/ppp-devel-2.4.5-33.0.rhel6.i686.rpm

我們這裡是32位系統,如果是64位系統請下載相應的軟件包。

三、安裝pptp VPN 服務器端

1. 下載把所需的軟件包,我們這裡把軟件下載到/vpnsoft目錄

2. 安裝軟件包

rpm -Uvh ppp-2.4.5-33.0.rhel6.i686.rpm

rpm -ivhppp-devel-2.4.5-33.0.rhel6.i686.rpm

rpm -ivh pptpd-1.4.0-1.el6.i686.rpm

rpm -ivh dkms-2.0.17.5-1.noarch.rpm (可以不安裝)

3.查看內核是否加載 mppe模塊 .

(1)# lsmod |grep ppp 默認情況下不會自動加載,所以命令執行後沒有返回結果。

(2)# modprobeppp-compress-18 手動加載mppe模塊

(3)再次查看mppe模塊是否加載

# lsmod |grep ppp

ppp_mppe 39881 0

ppp_generic 62689 1 ppp_mppe

slhc 39745 1 ppp_generic

出現上面情況說明已ppp模塊和mppe加載成功

四、PPTP服務配置

1.修改主配置文件/etc/pptpd.conf

# vi /etc/pptpd.conf

ppp/usr/sbin/pppd

option /etc/ppp/options.pptpd

debug

第一句指pppd服務在哪兒,第二句是指pptpd的參數配置文件的位置,第三句開啟調試日志(保存在/var/log/messages)。

在文件最後行修改以下兩行

localip 192.168.1.4

remoteip 192.168.10.234-254,192.168.10.256

Localip指本地的地址,就是客戶端要連接的VPN服務器的地址,可以是虛擬地址,也可以與remoteip地址同段或異段。

remoteip要給客戶端分配地址的范圍(如果地址不連續,可以用逗號隔開)。

2.修改/etc/ppp/options.pptpd參數配置文件

# vi/etc/ppp/options.pptpd

name vpnserver

name後面是VPN服務器的名稱,默認是pptpd,

開啟Authentication,默認是注釋掉的,是指是否開啟身份認證,必須的。

debug

開啟調試日志(保存在/var/log/messages)

ms-dns 8.8.8.8

ms-dns 8.8.4.4

添加DNS地址,我們用的是google的DNS.

refuse-pap 拒絕pap身份驗證

refuse-chap   拒絕chap身份驗證

refuse-mschap 拒絕mschap身份驗證

require-mschap-v2 使用mschap-v2身份驗證

require-mppe-128  使用 128-bit MPPE加密

3.修改/etc/ppp/chap-secrets用戶賬號文件 

# vi /etc/ppp/chap-secrets

#client server secret IP addresses

test001 vpnserver "test" *

client欄位指的是用戶名,server指VPN服務器名稱,要與/etc/ppp/options.pptpd文件裡name 後面的VPN服務器名稱一樣。Secret是指密碼,IP addresses 是指客戶端用哪個IP訪問,*號表示隨機分配。

4.網絡和iptable設置

因為要通過VPN服務器上網,所以要開啟ip_forward轉發功能和偽裝IP以及開啟相關協議端口. 如果要訪問VPN服務器的內部局域網的話,要用route add命令添加路由。

(1) 開啟轉發功能

# vi /etc/sysctl.conf

net.ipv4.ip_forward = 1

(2) 讓轉發功能立即生效

# sysctl -p

(3) 偽裝IP

# iptables -tnat -I POSTROUTING -p tcp -s 192.168.10.0/24 -j SNAT–to-source XX.XX.XX.XX

or

# iptables -tnat -I POSTROUTING -o eth0 -s 192.168.10.0/24 -j SNAT --to-source 192.168.1.4

XX.XX.XX.XX為VPN服務器外網IP

PS:也可以使用下面這條規則使用偽裝的形式達到同樣的效果.

--------------------------------------------------------------------------

iptables -t nat-A POSTROUTING -s 192.168.10.0/24 -j MASQUERADE

--------------------------------------------------------------------------

(4) 開啟相關協議端口

① 開放相應端口DNS/53 DHCP/68 PPTPD/1723

----------------------------------------------------------------------------

iptables -IINPUT -p udp --dport 53 -j ACCEPT

iptables -IINPUT -p tcp --dport 53 -j ACCEPT

iptables -IINPUT -p tcp --dport 68 -j ACCEPT

iptables -IINPUT -p tcp --dport 1723 -j ACCEPT

- ---------------------------------------------------------------------------

② 允許建立VPN隧道,否則無法驗證用戶名及密碼.

----------------------------------------------------------------------------

iptables -IINPUT -p gre -j ACCEPT

----------------------------------------------------------------------------

③ 允許客戶端的路由轉發.

----------------------------------------------------------------------------

iptables -IFORWARD -s 192.168.10.0/24 -j ACCEPT

iptables -IFORWARD -d 192.168.10.0/24 -j ACCEPT

----------------------------------------------------------------------------

service iptablessave

service iptablesrestart

----------------------------------------------------------------------------

(5)啟動pptpd服務

  service pptpd start 啟動

  service pptpd stop 停止,所有的會話連接都會丟失。

  service pptpdrestart 重啟服務,現在會話連接不會丟失。

(6)查看pptpd服務是否啟動

netstat –an |grep 1723

五、安裝linux VPN客戶端

環境:CentOS release 6.4 (Final) i386

軟件: libpcap-1.4.0,ppp-2.4.5-33.0.rhel6.i686.rpm,pptp-1.7.2-3.rhel5.i386.rpm

yum -yinstall libcap

http://poptop.sourceforge.net/yum/stable/rhel6Server/i386/ppp-2.4.5-33.0.rhel6.i686.rpm

http://nchc.dl.sourceforge.net/project/pptpclient/pptp/pptp-1.7.2/pptp-1.7.2-3.rhel5.i386.rpm

1. 安裝軟件包

# rpm -ivh ppp-2.4.5-33.0.rhel6.i686.rpm

# rpm -ivh pptp-1.7.2-3.rhel5.i386.rpm

2. 建立VPN連接通道

#pptpsetup --create vpntunnel --server 192.168.1.4 --username test001 --passwordtest --encrypt -start

vpntunnel 通道名稱

  --server 192.168.1.4 指定VPN服務器地址

--usernametest001 指定用戶名

--passwordtest 指定密碼

--encrypt 啟用加密

剛才建立的連接用戶和密碼信息會自動添加到/etc/ppp/chap-secrets文件中,並且在/etc/ppp/peers目錄下產生一個vpntunnel文件,文件內容如下:

# vi /etc/ppp/peers/vpntunnel

# written by pptpsetup

pty "pptp 192.168.1.4--nolaunchpppd"

lock

noauth

nobsdcomp

nodeflate

name test001

remotename vpntunnel

ipparam vpntunnel

require-mppe-128

# vi /etc/ppp/chap-secrets

# added by pptpsetup forvpntunnel

test001 vpntunnel"test" *

執行命令# pppd call vpntunnel,就可以連接到VPN Server了。也可用如下命令關閉開啟。

# /usr/share/doc/ppp-2.4.5/scripts/ponvpntunnel

# /usr/share/doc/ppp-2.4.5/scripts/poffvpntunnel

3.修改路由采用vpn聯網

# ip route replace 192.168.1.4 via192.168.1.1 dev eth0 src 192.168.1.180

# ip route replace default dev 'ppp0'

vpntunnel 通道名稱

--192.168.1.4 指定VPN服務器地址(vpn server)

--192.168.1.1 原網關地址

--eth0 原設備看連接

--192.168.1.180 原IP

--ppp0 vpn連接

Windows新建VPN以後默認使用VPN聯網,而Linux卻不是如果使用VPN連接網絡必須為Linux指定VPN路由。

六、Windows新建VPN連接

1.在window客戶端建立一個VPN連接

IP地址為VPN服務器地址,輸入用戶和密碼後連接。(具體操作略過)

2.查看連接

  在命令行運行ipconfig/all命令後,會多出一個PPP連接來,這樣就連接到VPN 服務器了。

3.在VPN服務器端,運行ifconfig後,也會多出一個PPP連接。

4.為了方便排除連接故障,可以在/etc/pptpd.conf主配置文件裡開啟debug和logwtmp選項,這兩個選項會把客戶端連接情況記錄在/var/log/message裡面。

5. VPN Client2做FTP服務器,VPN Client2獲取FTP數據時可用WireShark抓包,可以查看數據包是加密過的。

七、其它命令和技巧

1.連接(linux下有效)

pppd call tunnelname

tunnelname為用ifconfig查看到的PPP連接名稱。

2.斷開所有PPP連接

killall pppd

3.斷開指定ppp連接

ps–ef |grep pptpd

這樣會查出很多進程來,根據客戶端外網IP地址找到對應的進程號,然後kill掉就行了。

4.添加VPN用戶賬號

vpnuser add vpnuser vpnpasswd

5.刪除VPN用戶賬號

vpnuser del vpnuser

八、參考資料

1.軟件下載

http://poptop.sourceforge.net/

http://poptop.sourceforge.net/yum/stable/rhel6Server/i386/

http://sourceforge.net/projects/pptpclient/files/pptp/

2.配置文檔

http://yuejun.blog.51cto.com/634963/666650

http://blog.163.com/qk_zhu/blog/static/195076154201162795311632/

http://hi.baidu.com/reyleon/item/c48e981857d51612e3f9866d

http://hi.baidu.com/baihebeijixing/item/0b42b787decd8b2d100ef3d4

Copyright © Linux教程網 All Rights Reserved