這邊用Ubuntu Server 12.04來說明如何架設。
首先硬體方面,安裝兩張網路卡比較好,網路卡設定:
eth0(內部連線) | eth1(對外連線) | |
IP | 192.168.1.10 | i.i.i.i(視情況而定) |
Gateway | 不指定(因為不對外) | g.g.g.g(視情況) |
Mask | 255.255.255.0 | 255.255.255.0(視情況) |
DNS | (有內部dns server可在此指定) | 8.8.8.8(視情況) |
如果是全新安裝,那在安裝時候預設網路要選擇eth1,在DHCP會失敗沒關係(如果對外是DHCP連線就沒此問題),在下一步會讓你手動輸入對外網路連線資訊,就照著實際情況輸入好,這樣網路就會通。在選擇要安裝的套件先只選擇OpenSSH Server就好,其他就照著說明裝完吧。
裝好之後的設定步驟:
- 變身Root
sudo -i (輸入你帳號的密碼)
- 安裝pptpd
apt-get install pptpd
- 編輯/etc/pptpd.conf
vi /etc/pptpd.conf
- 幾乎都不用動,只需編輯最下面的localip與remoteip。
這裡說明一下,localip指的是vpn server的真實IP,也就是可連線到internet的IP;而remoteip就是你要指派給用戶端的IP範圍,跟DHCP的意思差不多。############################################################################### # $Id$ # # Sample Poptop configuration file /etc/pptpd.conf # # Changes are effective when pptpd is restarted. ############################################################################### # TAG: ppp # Path to the pppd program, default '/usr/sbin/pppd' on Linux # #ppp /usr/sbin/pppd # TAG: option # Specifies the location of the PPP options file. # By default PPP looks in '/etc/ppp/options' # #下面這行的檔案等等也要做修改。 option /etc/ppp/pptpd-options # TAG: debug # Turns on (more) debugging to syslog # #debug # TAG: stimeout # Specifies timeout (in seconds) on starting ctrl connection # # stimeout 10 # TAG: noipparam # Suppress the passing of the client's IP address to PPP, which is # done by default otherwise. # #noipparam # TAG: logwtmp # Use wtmp(5) to record client connections and disconnections. # logwtmp # TAG: bcrelay # Turns on broadcast relay to clients from interface # #bcrelay eth1 # TAG: localip # TAG: remoteip # Specifies the local and remote IP address ranges. # # Any addresses work as long as the local machine takes care of the # routing. But if you want to use MS-Windows networking, you should # use IP addresses out of the LAN address space and use the proxyarp # option in the pppd options file, or run bcrelay. # # You can specify single IP addresses seperated by commas or you can # specify ranges, or both. For example: # # 192.168.0.234,192.168.0.245-249,192.168.0.254 # # IMPORTANT RESTRICTIONS: # # 1. No spaces are permitted between commas or within addresses. # # 2. If you give more IP addresses than MAX_CONNECTIONS, it will # start at the beginning of the list and go until it gets # MAX_CONNECTIONS IPs. Others will be ignored. # # 3. No shortcuts in ranges! ie. 234-8 does not mean 234 to 238, # you must type 234-238 if you mean this. # # 4. If you give a single localIP, that's ok - all local IPs will # be set to the given one. You MUST still give at least one remote # IP for each simultaneous client. # # (Recommended) #localip 192.168.0.1 #remoteip 192.168.0.234-238,192.168.0.245 # or #localip 192.168.0.234-238,192.168.0.245 #remoteip 192.168.1.234-238,192.168.1.245 #伺服器真實IP,依實際情況修改 localip i.i.i.i #要指派給用戶端的內部IP範圍,依實際情況修改 remoteip 192.168.1.241-245
- 編輯/etc/ppp/pptpd-options檔案,把ms-dns打開,還有做一些連線認證的設定
############################################################################### # $Id$ # # Sample Poptop PPP options file /etc/ppp/pptpd-options # Options used by PPP when a connection arrives from a client. # This file is pointed to by /etc/pptpd.conf option keyword. # Changes are effective on the next connection. See "man pppd". # # You are expected to change this file to suit your system. As # packaged, it requires PPP 2.4.2 and the kernel MPPE module. ############################################################################### # Authentication # Name of the local system for authentication purposes # (must match the second field in /etc/ppp/chap-secrets entries) name pptpd # Optional: domain name to use for authentication # domain mydomain.net # Strip the domain prefix from the username before authentication. # (applies if you use pppd with chapms-strip-domain patch) #chapms-strip-domain # Encryption # Debian: on systems with a kernel built with the package # kernel-patch-mppe >= 2.4.2 and using ppp >= 2.4.2, ... # {{{ ################################################################# #注意這底下的設定,沒打開或是開錯了都有可能造成client端無法通過認證連線VPN refuse-pap refuse-chap refuse-mschap # Require the peer to authenticate itself using MS-CHAPv2 [Microsoft # Challenge Handshake Authentication Protocol, Version 2] authentication. require-mschap-v2 # Require MPPE 128-bit encryption # (note that MPPE requires the use of MSCHAP-V2 during authentication) require-mppe-128 # }}} ############################################ # Network and Routing # If pppd is acting as a server for Microsoft Windows clients, this # option allows pppd to supply one or two DNS (Domain Name Server) # addresses to the clients. The first instance of this option # specifies the primary DNS address; the second instance (if given) # specifies the secondary DNS address. # Attention! This information may not be taken into account by a Windows # client. See KB311218 in Microsoft's knowledge base for more information. #ms-dns 10.0.0.1 #ms-dns 10.0.0.2 #dns server依實際情況設定 ms-dns 8.8.8.8 ms-dns 8.8.4.4 # If pppd is acting as a server for Microsoft Windows or "Samba" # clients, this option allows pppd to supply one or two WINS (Windows # Internet Name Services) server addresses to the clients. The first # instance of this option specifies the primary WINS address; the # second instance (if given) specifies the secondary WINS address. #ms-wins 10.0.0.3 #ms-wins 10.0.0.4 # Add an entry to this system's ARP [Address Resolution Protocol] # table with the IP address of the peer and the Ethernet address of this # system. This will have the effect of making the peer appear to other # systems to be on the local ethernet. # (you do not need this if your PPTP server is responsible for routing # packets to the clients -- James Cameron) proxyarp # Debian: do not replace the default route nodefaultroute # Logging # Enable connection debugging facilities. # (see your syslog configuration for where pppd sends to) #debug # Print out all the option values which have been set. # (often requested by mailing list to verify options) #dump # Miscellaneous # Create a UUCP-style lock file for the pseudo-tty to ensure exclusive # access. lock # Disable BSD-Compress compression nobsdcomp
- 編輯/etc/ppp/chap-secrets,這個檔案設定可用VPN連線的使用者,跟系統裡的帳號無關,採用明碼設定,所以一定要記得權限只有root可讀寫(600),內容就照底下範例:
# Secrets for authentication using CHAP # client server secret IP addresses # 帳號名 勿動 密碼 允許連線的IP vpn-user pptpd userpassword *
- 設定好後重新啟動pptpd
/etc/init.d/pptpd restart
試著連線看看,OK~可以連線成功,但....嘿嘿...
怎麼連上去之後甚麼網站都去不了?
因為上面的設定只是讓外部網路使用者能以PPTP協定連線進來該台主機並取得內部IP,但預設NAT功能並沒打開,所以想要連其他IP或網站是不可能瘩!!!
所以我們繼續說明NAT設定...
- 首先開啟封包轉遞(IP forward功能)
vi /etc/sysctl.conf
# 將底下這個設定值修改正確即可! (本來值為 0 ,將它改為 1 即可) net.ipv4.ip_forward = 1
改完存檔後輸入 sysctl -p 讓設定馬上生效。 - 輸入底下指令打開IP轉送
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j MASQUERADE
上面指令是將192.168.1.x網段透過eth1(也就是外網)轉發出去 - 上面設定完之後,透過VPN連線進來的User們應該就可以上網和連線到別台主機了!!但是這樣Port其實是全開,有點危險,所以有機會要再設定一下iptables防火牆
----
經過參考鳥哥的網頁之後,可照著底下的步驟,可使這台也充當IP分享器和簡易防火牆的功能,照底下步驟設定的話,上面的步驟就可以省囉~
mkdir -p /usr/local/iptables vi /usr/local/iptables/iptables.rule
- 增加底下所有,並視情況修改
#!/bin/bash #設定參數 EXTIF="eth1" INIF="eth0" INNET="192.168.1.0/24" export EXTIF INIF INNET #重設防火牆規則 iptables -F iptables -X iptables -Z iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT #允許某些ICMP封包進入 ##AICMP="0 3 3/4 4 8 11 12 14 16 18" #AICMP="0 8 17 18" #for tyicmp in $AICMP #do # #iptables -A INPUT -i $EXTIF -p icmp --icmp-type $tyicmp -j ACCEPT #iptables -A INPUT -i $INIF -p icmp --icmp-type $tyicmp -j ACCEPT #done #內部網路全部允許 iptables -A INPUT -i $INIF -s $INNET -j ACCEPT #僅允許ssh與pptpd進入 iptables -A INPUT -p TCP --dport 22 --sport 1024:65534 -j ACCEPT #SSH iptables -A INPUT -p TCP --dport 1723 --sport 1024:65534 -j ACCEPT #PPTP #iptables -A INPUT -p TCP --dport 53 --sport 1024:65534 -j ACCEPT #DNS #iptables -A INPUT -p UDP --dport 53 --sport 1024:65534 -j ACCEPT #DNS #更新pptp之後,突然變得無法連線了嗎?因為新版pptpd要開GRE才能通的關係,所以必須打開47才能連線!!系統更新後就是為了這個卡超久 iptables -A INPUT -p 47 -j ACCEPT #清除NAT Table iptables -F -t nat iptables -X -t nat iptables -Z -t nat iptables -t nat -P PREROUTING ACCEPT iptables -t nat -P POSTROUTING ACCEPT iptables -t nat -P OUTPUT ACCEPT #開啟IP轉發 iptables -t nat -A POSTROUTING -s $INNET -o $EXTIF -j MASQUERADE #存檔 iptables-save
- 修改權限僅root可讀取寫入執行
chmod 700 /usr/local/iptables/iptables.*
- 這樣的步驟每次開機都要手動執行一次/usr/local/iptables/iptables.rule,太麻煩了,我們讓他每次開機就自動執行:
vi /etc/rc.local
在exit 0前面加上下面那行/usr/local/iptables/iptables.rule
存檔即可。
沒有留言:
張貼留言