歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> freebsd VPN 搭建

freebsd VPN 搭建

日期:2017/2/27 9:35:13   编辑:更多Linux
  我前前後後一共折騰了四天才弄完,真是麻煩死了,不過需要跟大家說明的是其實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