歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> Unix教程 >> freebsd VPN 搭建

freebsd VPN 搭建

日期:2017/2/27 17:42:34   编辑:Unix教程
FreeBSDVPN
  我前前後後一共折騰了四天才弄完,真是麻煩死了,不過需要跟大家說明的是其實VPN(PPTP方式)的配置在FreeBSD上面並不困難,大家只需要5分鐘就能解決了,其余99%的時間我有一半再跟tun0搏斗,結果發現我犯了個低級錯誤,另外一半時間我在跟ipfw搏斗,發現了VPN的連接機制還挺復雜。好了廢話不多說了,let's go
  
  我的目的是做一台ADSL撥號網關,這個網關上由MPD作為VPN網關的守護進程,使用PPTP協議作為傳輸協議,由於這台機器上有samba服務器,所以我無法開放我的所有端口,我必須封鎖所有不需要的端口。正因為這樣花了很長時間研究PPTP協議到底需要通過防火牆上的那些端口和那些協議。配置的目的已經告訴大家了,下面是配置的過程。
  
  首先從ppp撥ADSL說起,如果您對於使用ppp連接PPPoE(也就是ADSL使用的連接方式)已經非常熟悉了,那就可以跳過這一段直接看後面的。使用ppp連接PPPoE是非常簡單的,FreeBSD在安裝好之後你會在/etc/ppp/目錄下看到一個叫做ppp.conf的文件,你把這個文件修改成下面的樣子就可以連接PPPoE了,文件內容如下:
  
  default:
  set log Phase Chat LCP IPCP CCP tun command
  ident user-ppp VERSION (built COMPILATIONDATE)
  
  # Ensure that "device" references the correct serial port
  # for your modem. (cuaa0 = COM1, cuaa1 = COM2)
  #
  set device PPPoE:rl0
  set speed sync
  set mru 1492
  set mtu 1492
  set ctsrts off
  set timeout 60 # 3 minute idle timer (the default)
  enable dns # request DNS info (for resolv.conf)
  
  papchap:
  #
  # edit the next three lines and replace the items in caps with
  # the values which have been assigned by your ISP.
  #
  
  set authname #username#
  set authkey #password#
  set timeout 60
  set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0
  add default HISADDR # Add a (sticky) default route
  
  第一部分是設置日志的方式和一些默認信息
  
  set device PPPoE:後面需要改成你的網卡的驅動,我的是Realtek的8139,所以就是rl0了,下面是設置最大發送/接受單元,PPPoE默認是1492,然後timeout是在你是用auto方式的時候設置的超時時間,超過這個時間將會斷線。enable dns是打開從ISP服務端接收分配的DNS,後面papchap部分是設置你的PPPoE帳號信息,最後兩句是設置路由信息的,請務必添加。
  
  注意標簽後面的語句要有縮進,至少縮進一個空格,在帖子裡可能看不到,大家要注意!修改過配置文件之後你就可以用ppp -ddial papchap來試驗一下,如果連接上了網絡就沒問題了,在rc.conf文件中添加下面兩句就可以在開機的時候啟動ppp撥號:
  
  ppp_enable="YES"
  ppp_mode=ddial
  ppp_nat="YES"
  ppp_profile="papchap"
  
  其中ppp_mode=後面是ppp的方式,可選的有auto ddial background等等,具體的信息可以從man ppp中獲得。以上就是PPP撥PPPoE的配置,可以看到非常的簡單。
  
  下面一部分是啟動IPFW的防火牆,這個需要修改默認得內核設置,同時使用MPD也需要對內核進行修改,所就在這裡同時都修改了。我使用的是升級版本的IPFW,也就是被稱作IPFW2的防火牆,在FreeBSD4.x上使用這個防火牆需要重新編譯IPFW,這需要你事先安裝了FreeBSD4.6以上的源碼在你的硬盤上,然後執行下列步驟升級你的IPFW:
  
  cd /usr/src/sbin/ipfw
  make -DIPFW2
  make install
  cd /usr/src/lib/libalias
  make -DIPFW2
  make install
  
  或者在你/etc/make.conf裡面添加IPFW2=TRUE
  
  然後mak world來升級你的防火牆
  
  升級IPFW完畢之後,接下來就是修改內核了,重新編譯內核需要經過如下步驟,首先進入/sys/i386/conf/目錄,裡面有兩個文件,一個是GENERIC,另一個是LINT,具體的說明信息我就不贅述了,我只講一下我修改內核的過程。
  
  首先
  
  cp GENERIC mykern
  
  編輯mykern增加如下的部分:
  
  options NETGRAPH
  options NETGRAPH_PPPOE
  options NETGRAPH_SOCKET
  options NETGRAPH_ETHER
  options IPFW2
  options IPDIVERT
  options IPFIREWALL_VERBOSE
  options IPFIREWALL_VERBOSE_LIMIT=100
  options IPSTEALTH
  options ACCEPT_FILTER_DATA
  options ACCEPT_FILTER_HTTP
  
  退出編輯器
  
  config mykern
  cd ../../compile/mykern
  make depend
  make
  make install
  
  然後重新啟動機器內核的更新就已經完成了。
  
  這樣IPFW2的安裝就已經完成了,我們先不打開防火牆,我們先配置mpd來建立PPTP的服務器。關於MPD的安裝其實非常簡單,你可以自己手動編譯,但我還是推薦大家用ports來安裝,因為我實在是想不出什麼理由來不用ports安裝:)
  
  如果你安裝了ports到你的硬盤上,你通過下列步驟就可以完成mpd的安裝了
  
  cd /usr/ports/net/mpd
  make install
  make clean
  
  安裝完畢之後,ports會自動創建/usr/local/etc/mpd目錄
  
  並把配置文件的樣本存放在這個目錄裡面,可以通過修改已有的配置文件樣本來完成對mpd的配置,以mpd.conf.sample為例,首先cp mpd.conf.sample mpd.conf
  
  然後修改下面的部分
  pptp:
  new -i ng0 pptp pptp
  set iface disable on-demand
  set iface enable proxy-arp
  set iface idle 1800
  set bundle enable multilink
  set link yes acfcomp protocomp
  set link no pap chap
  set link enable chap
  set link keep-alive 10 60
  set link mtu 1460
  set ipcp yes vjcomp
  set ipcp ranges 192.168.1.1/32 192.168.1.50/32
  set ipcp dns 192.168.1.3
  set ipcp nbns 192.168.1.4
  #
  # The five lines below enable Microsoft Point-to-Point encryption
  # (MPPE) using the ng_mppc( netgraph node type.
  #
  set bundle enable compression
  set ccp yes mppc
  set ccp yes mpp-e40
  set ccp yes mpp-e128
  set ccp yes mpp-stateless
  
  這個是sample裡面的默認配置,下面對於需要修改的部分做出說明實際上我們需要修改只有三行,就是下面三行
  
  set ipcp ranges 192.168.1.1/32 192.168.1.50/32
  set ipcp dns 192.168.1.3
  set ipcp nbns 192.168.1.4
  
  第一行是設置你的本地VPN網關的地址,如果你是像我一樣用NAT來區分內外網的話這個應該是網關的內網地址,後面的是對方撥入以後將會在內網獲得的地址,這個地址倒是沒有什麼特殊要求,就是首先這個地址需要和內網處於一個網段,否則訪問不了,第二後面可以設置一個掩碼,來控制這個地址可能的范圍,如果這個地址被占用了,將會分配一個再限定范圍內的地址給客戶端,這個范圍由"/"後面的掩碼來控制。
  
  第二行是指定你內網使用的DNS服務器的地址,注意這個將會在用戶連入的時候同內網地址一起被分配給用戶
  
  第三行和第二行類似,是指定Netbios服務器的地址,如果內網沒有WINS服務器這行可以不寫。最後我還增加了一行命令,再不增加這個命令的時候mpd看起來也是正常運轉的,但是我不太放心還是加了這行加密指令
  
  set bundle enable encryption
  
  下面我們還需要稍微修改一下mpd.links.sample
  
  pptp:
  set link type pptp
  set pptp self 1.2.3.4
  set pptp enable incoming
  set pptp disable originate
  
  上面的部分裡面需要修改一下set pptp self 1.2.3.4這一行,這行是指定mpd的pptp服務器綁定在那個地址上面,如果是我們現在使用ppp撥叫ADSL的情況,會遇到網絡界面改變,ip地址改變的情況,就不能定義這一句,所以針對我們的情況,我們要去掉這句,其他的我們就不用改了
  
  當然我們還要修改一下mpd.secret文件
  
  這個文件定義了撥入用戶的用戶名和密碼
  
  用戶名寫在前面,密碼寫在後面用引號引起來,就像下面這樣
  
  fred "fred-pw"
  
  當然還可以指定這個用戶必須從那個地址或者網段來撥入,就像下面的例子:
  
  joe "foobar" 192.168.1.1
  bob "\x34\"foo\n" 192.168.1.10/24
  
  之後我們還可以添加一句來默認讓mpd執行pptp的這組設置,需要修改配置文件的這個部分:
  
  default:
  load pptp
  
  sample文件裡面還有配置多用戶登陸的情況下的樣本,我就不用在寫了,配置是一樣的改完這些之後只要運行mpd -b就可以啟動了
  
  由於考慮到安全原因我沒有書寫啟動腳本在開機的時候啟動mpd,因為對於防火牆來說在沒有用的時候多開一個端口就多一份危險,但是也許很多人需要在開機的時候自動運行mpd,下面我還是提供一個啟動腳本給大家,可以放在/usr/local/etc/rc.d/目錄下面記住要加上執行權限。
  
  #!/bin/sh
  
  PREFIX=/usr/local
  
  case "$1" in
  start)
  if [ -x ${PREFIX}/sbin/mpd -a -f ${PREFIX}/etc/mpd/mpd.conf ]; the
Copyright © Linux教程網 All Rights Reserved