隧道技術的基本過程是在源局域網與公網的接口處將數據(能夠是ISO 七層模型中的數據鏈路層或網絡層數據)做爲負載封裝在一種能夠在公網上傳輸的數據格式中,在目的局域網與公網的接口處將數據解封裝,取出負載。被封裝的數據包在互聯網上傳遞時所通過的邏輯路徑被稱爲「隧道」。linux
目前×××隧道協議有4種:點到點隧道協議PPTP、第二層隧道協議L2TP、網絡層隧道協議IPSec以及SOCKS v5.vim
原理:PPTP使用一個TCP鏈接對隧道進行維護,使用通用路由封裝(GRE)技術把數據封裝成PPP數據幀經過隧道傳送。能夠對封裝PPP幀中的負載數據進行加密或壓縮。安全
檢查:bash
因爲部分VPS可能沒法安裝,請先檢查服務器環境。服務器
第一步:檢查內核MPPE補丁是否安裝cookie
modprobe ppp-compress-18 && echo ok #執行結果顯示爲ok則表示經過。
第二步:檢查系統是否開啓TUN/TAP支持網絡
cat /dev/net/tun #結果爲cat: /dev/net/tun: File descriptor in bad state
第三步:檢查PPP是否支持MPPE.ssh
strings '/usr/sbin/pppd' |grep -i mppe | wc --lines #結果爲0則表示不支持,輸出大於30的數字則表示支持MPPE(Microsoft Point to Point Encryption,微軟點對點加密)
準備:
tcp
關閉防火牆ide
service iptables stop
下載咱們所需的有關PPTP的軟件。
wget http://www.hi-vps.com/downloads/dkms-2.0.17.5-1.noarch.rpm wget http://wty.name/linux/sources/kernel_ppp_mppe-1.0.2-3dkms.noarch.rpm wget http://poptop.sourceforge.net/yum/stable/rhel6/i386/ppp-2.4.5-33.0.rhel6.i686.rpm wget http://poptop.sourceforge.net/yum/stable/rhel6/i386/pptpd-1.4.0-1.el6.i686.rpm
安裝:
爲方便解決軟件的依賴性,咱們可使用yum來安裝本地的軟件包。注意:我是在安裝Kernel時一直安裝不成功,重啓服務器後正常安裝。
yum install dkms-2.0.17.5-1.noarch.rpm #自動解決了依賴性 yum install ppp-2.4.5-33.0.rhel6.i686.rpm yum install kernel_ppp_mppe-1.0.2-3dkms.noarch.rpm yum install pptpd-1.4.0-1.el6.i686.rpm
配置:
1.配置/etc/ppp/options.pptpd
cp /etc/ppp/options.pptpd /root/backup/options.pptpd.bak #備份原始的配置文件。 vim /etc/ppp/options.pptpd #編輯配置文件 #加入之前兩行後保存退出 ms-dns 8.8.8.8 ms-dns 8.8.4.4
2.配置/etc/ppp/chap-secrets
cp /etc/ppp/chap-secrets /root/backup/chap-secrets.bak #備份原始配置文件。 vim /etc/ppp/chap-secrets #編輯配置文件 # Secrets for authentication using CHAP # client server secret IP addresses ***user1 pptpd ***user1 * #添加×××用戶,名爲***user1,密碼爲***user1,容許全部主機鏈接。
3.配置/etc/pptpd.conf
cp /etc/pptpd.conf /root/backup/pptpd.conf.bak vim /etc/pptpd.conf #添加以下兩行 localip 192.168.0.1 remoteip 192.168.0.11-130 //表示***客戶端得到ip的範圍
4.配置/etc/sysctl.conf
vim /etc/sysctl.conf #修改覺得部分 net.ipv4.ip_forward=1 #開啓轉發功能 #net.ipv4.tcp_syncookies=1 #將該項註釋掉
sysctl -p #讓sysctl.conf的配置即時生效。
啓動服務:
service pptpd start #啓動服務,當使用restart時已創建的鏈接不會斷開。
這是咱們就能夠鏈接×××了,但這時鏈接上是上不了網的,咱們須要在iptables中開啓nat功能。
service iptables start iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j MASQUERADE
或使用
service iptables start iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j SNAT --to-source 你本身的公網IP
這時咱們能夠測試咱們的×××了,確認沒有問題後咱們能夠再優化一下咱們的iptables,提升服務器的安全性。
#iptables script #Author:Winter #Date:2014-06-21 #Version:1.0 #++++++++++++++++++++++++++++++++++++ #!/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin export PATH #加載相關模塊: modprobe ip_tables modprobe iptable_nat modprobe ip_nat_ftp modprobe ip_nat_irc modprobe ip_conntrack modprobe ip_conntrack_ftp modprobe ip_conntrack_irc # 清空全部規則: iptables -F iptables -X iptables -Z iptables -F -t nat iptables -X -t nat iptables -Z -t nat # 設置默認規則: iptables -P INPUT DROP #默認拒絕全部進入的請求 iptables -P OUTPUT DROP #默認拒絕全部出去的請求 iptables -P FORWARD DROP #默認拒絕全部轉發的請求 iptables -t nat -P PREROUTING ACCEPT iptables -t nat -P POSTROUTING ACCEPT iptables -t nat -P OUTPUT ACCEPT #默認容許全部nat的請求 # 容許全部進出迴環口的請求 iptables -A INPUT -i lo -j ACCEPT # 容許特定端口(對應服務)的請求 iptables -A INPUT -p tcp --dport 22 -j ACCEPT #ssh iptables -A INPUT -p tcp --dport 21 -j ACCEPT #ftp iptables -A INPUT -p tcp --dport 20 -j ACCEPT #ftp iptables -A INPUT -p tcp --dport 80 -j ACCEPT #www iptables -A INPUT -p tcp --dport 1723 -j ACCEPT #PPT iptables -A INPUT -p gre -j ACCEPT #grp,協議號47 iptables -A INPUT -p tcp --sport 443 -j ACCEPT iptables -A INPUT -p udp --sport 53 -j ACCEPT iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT #容許×××客戶端轉發 iptables -A FORWARD -d 192.168.0.0/24 -j ACCEPT #容許×××客戶端轉發 iptables -t nat -A POSTROUTING -o eth0 -s 192.168.0.0/24 -j MASQUERADE #nat地址轉換 iptables -I OUTPUT 1 -o eth0 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT #容許外出請求。