1. 程式人生 > >整理最近做的vpn系統的專案前端後端客戶端,排除些百度出來的坑。(一)vpn的配置之pptp與freeradius

整理最近做的vpn系統的專案前端後端客戶端,排除些百度出來的坑。(一)vpn的配置之pptp與freeradius

這個專案的所有vpn連線的認證是用freeradius+mysql,用freeradius+mysql進行登入驗證可以讓系統管理更加輕鬆。
只需要在主驗證伺服器上控制mysql的radius表 就能控制所有的vps的
靈活的應對各個vps上的不同的vpn協議(pptp、l2tp 、sstp、 openvpn)。
所以用一臺主伺服器就能控制所有使用者的有效期、同時線上數還有各個vps的連線狀態和流量監測。
這篇文章也修正了一部分網路上教程中頻繁出現的問題。
一些問題真的是不把各種情況的日誌仔細研究。就很難發現
系統用的是centos6.6 64位
getconf LONG_BIT 可以檢視系統位數
還有 cat /proc/version

新手在配置後如果vpn的服務啟動成功 但是客戶端連線不上。
最好的除錯的辦法就是去檢視iptables的日誌還有在/var/log/message 這些日誌資訊 找到 [ppp] 有關的資訊。
比如:

May 17 00:17:42 host-23-109-37-197 pppd[8927]: LCP terminated by peer (User request)
May 17 00:17:42 host-23-109-37-197 pppd[8927]: Connect time 6.5 minutes.
May 17 00:17:42 host-23-109-37-197 pppd[8927]: Sent 62494311 bytes, received 3799284 bytes.
May 17 00:17:45 host-23-109-37-197 pppd[8927]: Connection
terminated. May 17 00:17:45 host-23-109-37-197 pppd[8927]: Modem hangup May 17 00:17:45 host-23-109-37-197 pppd[8927]: Exit.

如果centos 系統太精簡的話,還需要安裝一些必要的編譯環境和ppp還有操作中要用到的程式

yum install -y  iptables make gcc gmp-devel xmlto bison flex libpcap-devel lsof vim-enhancedr cpio perl pam tcp_wrappers
這篇文章我主要是記錄freeradius 客戶端(撥號驗證服務)+pptp 的配置方法。不過我把pptp 的常用配置方法一併記錄下來。方便剛開始的新手參考。 
#freeradius 的伺服器端配置稍後再來寫。

一、檢查伺服器系統環境是否支援安裝pptp vpn

1、檢查系統核心是否支援MPPE補丁

modprobe ppp-compress-18 &&echo 1

顯示 1 說明系統支援MPPE補丁,如果不支援,需要先安裝kernel-devel

yum install kernel-devel
用以下命令檢查PPP是否支援MPPE:

strings /usr/sbin/pppd |grep -i mppe | wc --lines

如果以上命令輸出為“0”則表示不支援;輸出為“30”或更大的數字就表示支援,MPPE(Microsoft Point to Point Encryption,微軟點對點加密)。

2、檢查系統是否開啟TUN/TAP支援

cat /dev/net/tun

如果這條指令顯示結果為下面的文字,則表明通過:

cat: /dev/net/tun: File descriptor in bad state

3、檢查系統是否開啟ppp支援

cat /dev/ppp

如果這條指令顯示結果為下面的文字,則表明通過:

cat: /dev/ppp: No such device or address

上面三條必須同時滿足,否則不能安裝pptp vpn

二、開始安裝pptp

直接執行
yum -y install ppp pptpd
如果出現 No package pptpd available. 
那就需要 rpm 來安裝
一般linux 系統裡都會有這些安裝程式 如果沒有就自行下載後rpm進行安裝.執行下面的命令

1、ppp #安裝pptpd需要此支援

rpm -ivh http://poptop.sourceforge.net/yum/stable/packages/ppp-2.4.4-14.1.rhel5.x86_64.rpm

2、pptpd

rpm -ivh http://poptop.sourceforge.net/yum/stable/packages/pptpd-1.4.0-1.rhel5.x86_64.rpm

如果出現
ppp = 2.4.4 is needed by pptpd-1.3.4-2.rhel5.x86_64
原因是pptpd與PPP不相容,下載pptpd-1.3.4-2.el6.x86_64.rpm安裝即可。

我找來一些別人分享的資源可供下載(Sina 部落格:Professor哥)
當然如果你可以直接訪問 poptop.sourceforge.net 的話可以直接去這裡下載。

等全部安裝完畢 就開始配置ppp 和pptp 了

三、配置pptp

1.配置檔案/etc/ppp/options.pptpd

vi /etc/ppp/options.pptpd

修改options.pptpd內容如下(用以下內容替換所有原內容):

    name pptpd
    refuse-pap
    refuse-chap
    refuse-mschap
    require-mschap-v2
    require-mppe-128
    proxyarp
    lock
    nobsdcomp
    novj
    novjccomp
    nologfd
    idle 2592000
    ms-dns 8.8.8.8
    ms-dns 8.8.4.4
  • 解析:ms-dns 8.8.8.8, ms-dns 8.8.4.4是使用google的dns伺服器。
  • 注意:如果虛擬機器核心不支援MPPE的話,無法使用加密,用WINDOWS預設VPN連線會顯示“證書信任錯誤”。
    解決方法:修改/etc/ppp/options.pptpd註釋掉require-mppe-128(註釋:#require-mppe-128)這行,然後windows的vpn撥號的屬性改為可選加密,再次連線就成功了

2、不使用freeradius 直接用文字來做vpn使用者認證

vi /etc/ppp/chap-secrets 

新增pptp撥號使用者和密碼(可以設定多個使用者,每行一個)

 #client server secret IP addresses 
 test1 pptpd 123456 * 
 test2 pptpd 1234 * 

格式:使用者名稱 pptpd 密碼 * 其中*表示為客戶端自動分配IP地址

3、 設定pptp伺服器IP地址,設定vpn撥入客戶端ip的ip分配範圍

vi /etc/pptpd.conf 
option /etc/ppp/options.pptpd
logwtmp
localip 192.168.1.1 #這就相當於配置路由器的地址。一個區域網內的閘道器地址。
remoteip 192.168.1.2-254  #為連線vpn的使用者動態分配192.168.1.254之間的IP地址的地址。注意:不能用1-255, 192.168.1.1 是閘道器地址192.168.1.255是廣播地址。

4.配置檔案/etc/sysctl.conf 開啟路由轉發
將“net.ipv4.ip_forward”改為1:

net.ipv4.ip_forward=1

同時在“net.ipv4.tcp_syncookies = 1”前面加# :

# net.ipv4.tcp_syncookies = 1

*另外:還可以可以執行下面的命令來建立裝置節點

    mknod /dev/ppp c 108 0 #建立ppp裝置節點
    echo 1 > /proc/sys/net/ipv4/ip_forward 
    echo "mknod /dev/ppp c 108 0" >> /etc/rc.local
    echo "echo 1 > /proc/sys/net/ipv4/ip_forward" >> /etc/rc.local

儲存退出,並執行下面的命令來生效它:

sysctl -p 或
/sbin/sysctl -p

四.配置防火牆

不配置防火牆轉發規則的話。。就只能連線vpn上不了網

iptables -t nat -A POSTROUTING -o eth0 -s 192.168.1.0/24 -j MASQUERAD #新增規則eth0 是網絡卡 一般單網絡卡都是叫這個 如果你的不是就替換成你的網絡卡名稱 MASQUERAD 自行判斷
或者
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j SNAT --to-source 153.128.21.17 #153.128.21.17 這個是你的公網 ip 

iptables -A FORWARD -p tcp --syn -s 192.168.1.0/24 -j TCPMSS --set-mss 1356  #新增規則 這兩條命令的192.168.1.1 就是之前的local ip ,24 子網掩碼
或者
iptables -A FORWARD -p tcp -i ppp+ -j TCPMSS  --syn --set-mss 1356 #調節適合ppp的mss 如果不設定這個值 會出現網路中MTU過大 然後導致資料包被丟棄的情況。也就是連上了pptp 但是上不了網

iptables -A INPUT -p gre -j ACCEPT                                          # 放行47埠    
iptables -A INPUT -p tcp --dport 1723 -j ACCEPT    # 放行1723埠 

/etc/init.d/iptables save #儲存防火牆設定

下面 貼出一個我的iptables 供參考 注意我裡面的註釋 不需要照抄,使伺服器除了ssh連線 和 pptp連線,其餘的連線一律拒絕,防止被攻擊 ,以下是防火牆配置檔案裡的內容
/etc/sysconfig/iptables

##########################################
 # Generated by iptables-save v1.4.7 on Tue Mar  8 15:02:25 2016
*filter
:FORWARD ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT 
-A INPUT -p icmp -j ACCEPT 
-A INPUT -i lo -j ACCEPT 
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT #ssh連線埠開放
-A INPUT -p gre -j ACCEPT 
-A INPUT -p tcp -m tcp --dport 1723 -j ACCEPT 
-A INPUT -p udp -m udp --dport 1812 -j ACCEPT
 #1812-1814 這三條是我的伺服器作為遠端freerdius 驗證伺服器的埠
 #如果你們不用fresradius 做認證可以不需要這三條
 # 重點是 1812 1813 1814 freeradius 在監聽時都是監聽的udp協議。。
 #網上的教程 防火牆的過濾好多都寫得是tcp。
 #結果就是如果radius客戶端和伺服器端不是同一臺伺服器時。。根本就不能通訊
-A INPUT -p udp -m udp --dport 1813 -j ACCEPT 
#1812 是radius 用來認證的 1813 是用來計時之類的。
#如果1813埠不開放。那什麼時候登入退出  還有 流量都不會被記錄
-A INPUT -p udp -m udp --dport 1814 -j ACCEPT
-A INPUT -p udp -m udp --dport 53 -j ACCEPT #dns埠
-A FORWARD -p tcp -i ppp+ -j TCPMSS  --syn --set-mss 1356
-A INPUT -j REJECT --reject-with icmp-host-prohibited  #拒絕除了以上規則的所有請求
COMMIT
 # Completed on Tue Mar  8 15:02:25 2016
 # Generated by iptables-save v1.4.7 on Tue Mar  8 15:02:25 2016
*nat
:PREROUTING ACCEPT [37:3710]
:POSTROUTING ACCEPT [18:1675]
:OUTPUT ACCEPT [18:1675]
-A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE #路由轉發把vpn連線的資料轉到進入外網的網絡卡上
COMMIT
 # Completed on Tue Mar  8 15:02:25 2016
 # Generated by webmin
*mangle
:FORWARD ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
COMMIT
 # Completed
##########################################

都配置好後

/sbin/service pptpd start #啟動pptp

/etc/init.d/pptpd stop #關閉

service pptpd restart #重啟

chkconfig pptpd on  #設定開機啟動

以下是配置pptp 中的 freeradius 客戶端配置部分
下面的操作不會被之前pptp的配置所影響
只需將 freeradius 連線、客戶端配置新增到
/etc/ppp/options.pptpd

1.找到一個想要的freeradius client 做客戶端

可以直接去freeradius的ftp來複制想要的版本連結

然後用命令下載

wget ftp://ftp.freeradius.org/pub/freeradius/freeradius-client-1.1.7.tar.gz

再解壓

tar zxvf freeradius-client-1.1.7.tar.gz

再進入目錄進行編譯

cd freeradius-client-1.1.7
./configure && make && make install

然後再進行freeradius 客戶端的配置

vi /usr/local/etc/radiusclient/radiusclient.conf

用這條命令可以跳過空段和註釋段

cat  /usr/local/etc/radiusclient/radiusclient.conf |grep -v ^# |grep -v ^$

看到的就是這樣

auth_order      radius,local
login_tries     4
login_timeout   60
nologin /etc/nologin
issue   /usr/local/etc/radiusclient/issue
authserver      localhost
acctserver      localhost
servers         /usr/local/etc/radiusclient/servers
dictionary      /usr/local/etc/radiusclient/dictionary
login_radius    /usr/local/sbin/login.radius
seqfile         /var/run/radius.seq
mapfile         /usr/local/etc/radiusclient/port-id-map
default_realm
radius_timeout  10
radius_retries  3
radius_deadtime 0
bindaddr *
login_local     /bin/login

找到 authserver 和 acctserver 將值改為 freeradius 驗證主伺服器的 ip地址:埠號
將 radius_deadtime 0 和 bindaddr * 將這兩項註釋掉(或者通過以下命令來註釋之)

sed -i ‘s/radius_deadtime/#radius_deadtime/g’ /usr/local/etc/radiusclient/radiusclient.conf
sed -i ‘s/bindaddr/#bindaddr/g’ /usr/local/etc/radiusclient/radiusclient.conf

就像這樣

auth_order  radius
login_tries 4
login_timeout   60
nologin /etc/nologin
issue   /usr/local/etc/radiusclient/issue
authserver  108.61.16.250:1812
acctserver  108.61.16.250:1813
servers     /usr/local/etc/radiusclient/servers
dictionary  /usr/local/etc/radiusclient/dictionary
login_radius    /usr/local/sbin/login.radius
seqfile     /var/run/radius.seq
mapfile     /usr/local/etc/radiusclient/port-id-map
default_realm
radius_timeout  10
radius_retries  3
login_local /bin/login

指定FreeRADIUS Server地址,並設定key

cat >>/usr/local/etc/radiusclient/servers<<EOF
108.61.16.250   testing123
EOF

增加字典。這一步很重要!

wget -c http://hello-linux.googlecode.com/files/dictionary.microsoft
mv ./dictionary.microsoft /usr/local/etc/radiusclient/
cat >>/usr/local/etc/radiusclient/dictionary<<EOF
INCLUDE /usr/local/etc/radiusclient/dictionary.sip
INCLUDE /usr/local/etc/radiusclient/dictionary.ascend
INCLUDE /usr/local/etc/radiusclient/dictionary.merit
INCLUDE /usr/local/etc/radiusclient/dictionary.compat
INCLUDE /usr/local/etc/radiusclient/dictionary.microsoft
EOF

然後找到radius.so

locate radius.so

然後在 /etc/ppp/options.pptpd 最後一行新增他的路徑 要選對應自己的系統位數的那個路徑的radius.so

plugin /usr/lib64/pppd/2.4.5/radius.so
#也可以直接寫 plugin radius.so
radius-config-file /usr/local/etc/radiusclient/radiusclient.conf

這些配置好後就可以連線了 pptp 連線後 pptp伺服器會向freeradius 伺服器請求驗證 驗證通過後就ptpp 連線成功。
如果你們出錯了。就可以在

/var/log/message 

檢視系統日誌 找出錯誤原因
查查是在驗證的時候連線不上radius 驗證伺服器
還是pptp本身不能成功連線客戶端
freeradius 可以進行 兩臺伺服器驗證測試
只需在freeradius服務端停止radiusd服務

service radiud stop

然後進入debug 除錯模式來觀察驗證狀態

然後進入debug 除錯模式來觀察驗證狀態
radiud -X

客戶端只需用radtest命令即可

[[email protected] ~]# radtest
Usage: radtest [OPTIONS] user passwd radius-server[:port] nas-port-number secret [ppphint] [nasname]
        -d RADIUS_DIR       Set radius directory
        -t <type>           Set authentication method
                            type can be pap, chap, mschap, or eap-md5
        -x                  Enable debug output
        -4                  Use IPv4 for the NAS address (default)
        -6                  Use IPv6 for the NAS address

但是因為我客戶端不是安裝的整個freeradius 服務
而是隻編譯了精簡的 freeradius-client 客戶端 所有沒有radtest 命令可以用
這時你只需在freeradius的服務端從
/usr/bin 裡 把radtest 和 radclient 這兩個檔案
複製到 freeradius 客戶端 伺服器裡的
/usr/bin 即可 執行radtest 命令了

相關推薦

整理最近vpn系統專案前端客戶排除出來()vpn配置pptpfreeradius

這個專案的所有vpn連線的認證是用freeradius+mysql,用freeradius+mysql進行登入驗證可以讓系統管理更加輕鬆。 只需要在主驗證伺服器上控制mysql的radius表 就能控制所有的vps的 靈活的應對各個vps上的不同的vpn協議(p

最近保險公司專案

就單證模組來說吧,每天平均2w單的增量,主表已經過3億,這樣的資料量肯定構架的人沒有想到,或者想到了跟他也沒有關係,就忽悠客戶,現在麻煩來了,客戶需要做各種各樣的盤點,把資料查一個底朝天,想想看,3億資料,日誌表甚至過10億了,這樣的資料進行分組,排序,表關聯查詢,是何等的慢,所以構架師幹不好就是個

A/B 測試的基本概念舉例理解以及具體實現方法【傳統A/B測試基於的 A/B 測試(Back-end AB test)現在基本上基於前端js在客戶進行分流有更多優點請看裡面】

文章來源:http://www.aliued.cn/2010/09/27/ab-testing-realization-method.html 什麼是A/B測試?以及如何進行? 很多朋友都問我怎麼進行A/B測試,我一般都不直接回答他們的問題,而是首先問一句:“你的日

社交系統ThinkSNS+ V0.8.7發布“問答”功能千呼萬喚始出來

加載 blank cab www. mini 成功 登陸 推薦 sns 【摘要】社交系統ThinkSNS+又更了,本次跳過了0.8.6,直接發布0.8.7,新增功能主要有問答系統,問答系統主要有最新問答、精選、懸賞、熱門、全部以及話題;第三方登錄,含QQ登錄、微信登錄、微博

網上淘寶刷單員兼職被騙怎麽辦-_經驗

兼職 刷單 網上做淘寶刷單員兼職被騙怎麽辦-百度_經驗【支付寶全民小二QQ:951883135】我們將全力為您追回所有被騙去的資金等,支付寶全民小二QQ:【951883135】 微信、支付寶 淘寶、刷單被騙 維權投訴、等等其他的業務。 之前我就是通過這個方法把錢追回。網上做淘寶刷單員兼職被騙怎麽辦-百

前端服務客戶三方聯調的總結

由於負責專案的原因第一次與客戶端服務端三方聯調,感覺有必要總結一下,雖然內容不復雜 技術也不難,總結總是好的。 就是要求使用者去關注公眾號,成功之後給予金幣獎勵。 和服務端的互動:進入頁面,反覆輪循去請求介面,服務端輪循去查詢資料庫,當得到返回結果是成功的時候銷燬該頁面。30s後停止請求。 和客戶端的互

關於mysql安裝客戶cmd插入語句無法執行的問題

字符 mysql安裝 客戶端 界面 默認 無法執行 client gb2 set 關於mysql安裝後在客戶端cmd插入語句無法執行的問題 因為windows cmd默認字符集是gbk,當character_set_client=utf8時,cmd中出現中文會報錯;c

vue 專案快速輸出微信、支付寶、小程式

上週,[email protected] 正式釋出,優化了資料更新效能的同時,支援了百度智慧小程式,著實激動了一把,這“可能”是目前社群裡第一個同時支援三端小程式的 vue 小程式框架。下面我們就來試試他的效果。 跟著文件走 官方文件的第一部分就是快速入門,順藤摸瓜,構建一個 megalo 專案

負載均衡獲取客戶真實ip

String ip3=request.getRemoteAddr(); 如果沒有配負載均衡,則request.getRemoteAddr() 獲取的就是真實客戶端IP,如果配了nginx負載均衡,則request.getRemoteAddr() 獲取的是負載均衡nginx伺服器的ip,而不是真實

Windows10系統在安裝完Git客戶之後桌面的文件和快捷方式都出現藍色的問號的解決方式

1 安裝完Git客戶端之後會出現藍色的問號:例如: 2:解決方式: window 7 ---->把隱藏的檔案全部顯示: 工具-資料夾選項-在檢視中找到 “隱藏檔案和資料夾” 那一欄,勾選“顯示所有檔案、資料夾和驅動器”,需要把“隱藏受保護作業系統安全檔案”前的鉤去掉. w

canal 修改mysql資料Java客戶無反應的問題解決方案

canal官方文件可以點選這裡檢視。 按照官網的教程完成配置後會發現,在修改mysql時java客戶端還是沒有反應。暫時發現有以下兩種原因: 1.需要修改canal.properties配置,但是官網沒有講解。(大概率) 進入canal解壓檔案 ,編輯conf/canal.prope

Android 地圖開發()如何呼叫地圖介面和在專案中顯示地圖以及實現定位

二、下載百度地圖API庫 然後新增到專案中即可。   三、在專案清單AndroidMainifest.xml配置百度地圖API key和新增相關許可權                         四、在專案呼叫百度地圖專案功能,這篇文章就首先講講顯示地圖和定位的功能 首先

Git專案的初始化--客戶

分散式專案版本管理工具,效果遠超SVN,誰用誰知道?安裝(windows):git的安裝通常是按照正常順序執行安裝即可,沒什麼複雜的?基礎配置:linu下載:wget命令即可linux下的最重要的安裝依賴的問題?安裝Git?tar -zxvf git的gz包編譯?make p

前端開發的客戶本地儲存

4 在前端開發過程中,為了與伺服器更方便的互動或者提升使用者體驗,我們都會在客戶端(使用者)本地儲存一部分資料,比如cookie/localStorage/sessionStorage。在後端管理系統的前端,更是會涉及到一部分超大資料的請求,一個介面有時會達到5M甚至15M

.Net Core/FrameworkNginx反向代理獲取客戶IP等數據探索

aspnet keep 關於 asp off seh time 失誤 war   公司項目最近出現獲取訪問域名、端口、IP錯誤現象,通過排查發現, 之前項目一直通過Nginx自定義Headers信息來獲取,但最近運維人員失誤操作造成自定義Header信息丟失,造成項目拿不到

【Android實戰專案】Odoo 郵箱客戶的經歷

在技術層面上來說,我在開發這款APP的時候,只是個大三的學生,經驗上和技術上都不成熟,現在大四,把之前做的Odoo 郵箱拿出來總結一下,和大家分享一下, 在漫長的開發中,也發現了很多新人都會犯的毛病,大部分人都太強調實踐操作,而疏忽了多看書總結經驗,由於是企業應用,全部原始

apt-get upgrade升級docker客戶和伺服器版本不一致問題解決方式

錯誤現象:$ docker images Error response from daemon: client and server don't have same version (client : 1.19, server: 1.18)錯誤原因說明:使用apt-get

sql2005安裝沒有客戶 這個問題困擾好多開發人員!我通過自己的摸索和總結 終於搞明白了!!!

Microsoft SQL Server Management Studio Express (SSMSE) 是一種免費、易用的圖形管理工具,用於管理 SQL Server 2005 Express Edition 和具有高階服務的 SQL Server 2005 Express Edition。

筆記本清灰組裝出現藍屏並不斷的迴圈重啟

前兩天自己手動第一次對自己的筆記本進行了拆解,以前清灰什麼的都是在臺式機上,已經熟的不能再熟了,但是拆解筆記本還是第一次,所以拆的那叫膽顫心驚,就深怕拆壞了,而舍友說拆了肯定不能用了,嚇得我半死。 終於黃天不負有心人,拆完了機器,清完灰,然後就進行組裝,但是坑爹的是筆記本還

推薦一個適用於SpringBoot專案的輕量級HTTP客戶框架快來試試它!

在`SpringBoot`專案直接使用`okhttp`、`httpClient`或者`RestTemplate`發起`HTTP`請求,既繁瑣又不方便統一管理。因此,在這裡推薦一個適用於`SpringBoot`專案的輕量級HTTP客戶端框架[retrofit-spring-boot-starter](https