Linux操作不求人 - 肆章之捌 - 伺服器架設(VIII) - 虛擬私有網路伺服器 - VPN 與 PPPoE

@VPN    
     VPN (Virtual Private Network,https://en.wikipedia.org/wiki/Virtual_private_network),為於公司網域內建立一個私人的路由通道,可以在網際網路上透過登入VPN tunnel 的方式,來存取公司的內部網路,使用內部網站與網路資源。Tor(The Onion Routers,https://www.torproject.org/ )的方式,便是一種多層式 VPN 加密通道的應用。通常 VPN 的服務可以在防火牆、路由器、無線AP(如Juniper,Fortinet,Linksys,CISCO等網路設備公司)的設定,都可以看到設定 VPN Server 與搭配網路設備公司各自撰寫的 VPN Client,便可以將作業系統整個網路環境換成公司內部網路的 domain,而非利用 Tor browser 或是 Google Chrome plugin - VPN 此種則僅將瀏覽器視窗環境改成 VPN 的 domain,則可以用來〝翻牆〞,或用來網購國外特價的潮牌或名牌物品。在CentOS6_x64下,則有 OpenVPN 伺服器軟體可供架設 VPN Server。同樣的,我們利用指令 yum -y install openvpn 來下載。(圖4-71)



































(圖4-71)

接著複製 openvpn 範例檔案,來成為我們要使用的設定檔,如圖4-72,並利用指令 vim /etc/server.conf 修改內容:




 
 (圖4-72)

    筆者以下僅將要修改的參數列出,其餘維持預設值即可:
local   10.0.2.15 
port   1194
ca     /etc/openvpn/myca.crt
cert  /etc/openvpn/myvpn.crt
key   /etc/openvpn/myvpn.key
/*   自行派發的伺服器主機憑證與金鑰   */

dh   /etc/openvpn/myvpndh.pem
/*   VPN 所需要的 Diffie hellman 交換方法的金鑰檔,https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange  */ 

tls-auth  mytls.key  0  
/*  HMAC (https://openvpn.net/index.php/open-source/documentation/security-overview.html,http://www.ciscopress.com/articles/article.asp?p=24833&seqNum=4),利用 tls 加密,Server端設定檔指定 0,Client設定檔指定為 1  */

server 10.0.2.0 255.255.255.0

push  "redirect-gateway  def1  bypass-dhcp

push  "dhcp-option  DNS  8.8.8.8"
push  "dhcp-option  DNS  8.8.4.4"       /*  可以利用  goolge 的 dns  */
push  "dhcp-option  DNS  208.67.222.222"
push  "dhcp-option  DNS  208.67.220.220"

user nobody
group  nobody

log-append     openvpn.log

以上設定後,儲存離開 /etc/openvpn/server.conf,接著利用以下指令,如前面篇章,來產生可用十年,剛設定檔指定的金鑰與憑證 /etc/openvpn/myca.crt 、 /etc/openvpn/myvpn.crt 和   /etc/openvpn/myvpn.key:

$  cd  /etc/openvpn

$ openssl  req  -x509  -nodes  -days 3650 -newkey  rsa:2048  -keyout  myvpn.key -out \   myca.crt
$  cp  myca.crt  myvpn.crt

如設定檔內的說明,再接著產生 VPN 需要用到的 Diffie hellman 參數(https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange)的金鑰檔
$  openssl   hdparam  -out   myvpndh.pem   2048

$ openvpn  --genkey --secret  mytls.key

以上亦可以利用 easy-rsa 套件產生,先用指令 yum -y install easy-rsa,下載套件,再來用指令 cp  /usr/share/easy-rsa  /etc/openvpn,將 easy-rsa 金鑰產生器複製到 /etc/openvpn下,接著編輯產生器所需的變數值,如以下:
$ cd /etc/openvpn/easy-rsa/2.0
$ vim vars



































 (圖4-73)
 
 如圖4-73,將 KEY_COUNTRYKEY_PROVINCEKEY_CITYKEY_ORGKEY_EMAILKEY_OU,這些環境變數改成您的公司主機資訊。接著利用指令 source  ./vars,來執行這些環境變數。再來執行以下指令來產生金鑰與憑證
$  ./clean-all
$  ./build-ca myca
$  ./build-key-server myvpn
$  ./build-key  myclinet
$  ./build-d

$  openvpn  --genkey --secret  ../keys/mytls.key

/* 以上執行完後,便會在 /etc/openvpn/keys/ 資料夾內,產生  myca.crtmyvpn.crtmyvpn.keymyclient.crt,myclient.keymyvpndh.pem,再將 /etc/openvpn/server.conf內的憑證與金鑰路徑設定換成以下即可:
ca     /etc/openvpn/keys/myca.crt
cert  /etc/openvpn/keys/myvpn.crt
key   /etc/openvpn/keys/myvpn.key
dh    /etc/openvpn/keys/myvpndh.pem

以上伺服器端軟體設定完成後,在連入端若為 Linux 作業環境,請將剛剛產生的 myca.crt、myclient.crt、myclient.key、mytls.key 複製到自己的家目錄下( 如要複製 myca.crt 從伺服器端遠端複製到連入主機端,可使用指令 scp /etc/openvpn/keys/myca.crt  newuser@10.0.2.20:${HOME}  )

接著在連入端的家目錄下產生一個 client.ovpn 檔,並加入以下內容
client
dev tun
proto udp

remote  10.0.2.15  1194
resolv-retry infinite
nobind
persist-key
persist-tun
mute-replay-warnings
ca myca.crt
cert  myclient.crt
key   myclient.key
ns-cert-type server
comp-lzo

tls-auth  mytls.key  1

/*  以上設定完,儲存離開後,可以用 root身分並利用指令 openvpn --config  clinet.ovpn 來連入   */
     若是連入端主機為 MS Windows 則請先安裝 OpenVPN 連線程式( https://openvpn.net/index.php/open-source/downloads.html ),並將檔案 client.ovpn 放入 C:\Programs Files\OpenVPN\config (視作頁系統與安裝位置來修正) 之內,或安裝好 OpenVPN 後,會關聯到 .ovpn檔,就直接點選 client.ovpn 檔。若連入端為 MacOS 則先安裝https://tunnelblick.net/downloads.html。


接者要開啟 IPv4 forwarding,強迫寫入以下參數至 /etc/sysctl.conf
$  echo 'net.ipv4.ip_forward = 1'   >>!   /etc/sysctl.conf
/*  亦可以使用指令echo '1' >!  /proc/sys/net/ipv4/ip_forward  */


$  sysctl -p 
/*  sysctl 重新載入參數   */


設定 iptables 允許與轉路由,將 VPN Service 可對外部網域開放
$  iptables  -I  INPUT  -p  tcp --dport  1194   -j  ACCEPT  
$  iptables  -A  POSTROUTING  -t  nat   -s  10.0.2.0/24  -o eth1 -j  MASQUERADE
$  iptables  -A  POSTROUTING  -t  nat   -s  192.168.100.0/24  -o eth1 -j  MASQUERADE
$  service  iptables  save   
/*  http://community.openvpn.net/openvpn/wiki/BridgingAndRouting  */

開啟 SELinux 允許複製到連入端的 myca.crt,可以供連入端主機使用
$  semanage  fcontext  -a  -t  home_cert_t  myca.crt
$  restorecon  -R  -v  myca.crt

啟動並加入開啟載入
$  service openvpn start
$  chkconfig  --level 235 openvpn on

其他關於 OpenVPN 更詳細設定參數,請參考 https://openvpn.net/index.php/open-source/documentation/howto.html。


@PPPoE

PPPoE 通常用於 ISP(如 Chunghwa Telecom)公司提供 DSL 上網會使用到的連線橋接方式。PPPoE僅需要提供登入的帳號與密碼,就可以讓其中連入的電腦主機,透過 PPPoE 伺服器,來連線至外部網路(WAN),或網際網路。PPPoE 伺服器端軟體的部份,可利用 yum install -y rp-pppoe 圖4-74-1),或從 https://www.roaringpenguin.com/products/pppoe,下載 RP-PPPoE(圖4-74-2)














(圖4-74-1)

































(圖4-74-1)

接著設定 pppoe 伺服器軟體的設定檔 /etc/ppp/pppoe-server-options,修改如圖4-75



(圖4-75)

圖4-75,設定驗證方式為 pap 或 chap 驗證(https://en.wikipedia.org/wiki/Password_Authentication_Protocol),我們用 chap 方式。並將 lcp-echo-interval 設定為每 5 秒嘗試重連線,lcp-echo-failure 設定為嘗試 3 次失敗則停止,也就是( 5*3 )秒的時間內沒有連線正常,則斷線,讀者亦可維持預設值即可。ms-dns 則設定為給連入主機使用之 DNS,端看您的公司或ISP規定使用之 DNS Server的 IP位址。
接著編輯chap的帳號密碼檔案 /etc/ppp/chap-secrets(圖4-76),若設定檔內值為預設 require-pap,則要編輯 /etc/ppp/pap-secrets。如圖4-76說明所示,我們僅需輸入系統內有的帳號,並需要給定密碼,格式如圖4-76,其中 * 為允許來自任何名稱,並且IP為任何IP皆可用 newuser 帳號連入。







(圖4-76)

接著要開啟 ip forward 的權限,讓連(撥)入的主機,可以連上 PPPoE 伺服器所使用的網際網路。如下:
$  echo  'net.ipv4.ip_forward=1'   >!  /etc/sysctl.conf
/* 暫時用,可用指令 echo '1' >!  /proc/sys/net/ipv4/ip_forward  */
$  sysctl  -p

接著設定 iptables 的 NAT 轉址能力,如前述的VPN設定:
$ iptables -A  POSTROUTING  -t  nat -s 192.168.100.0/24  -o eth0 -j   MASQUERADE 
/*  eth0 為對外連上 Internet 之網卡  */

$ iptables -A  POSTROUTING  -t  nat -s 192.168.100.0/24  -o eth0 -j SNAT  --to-destination 10.0.2.15
/*  轉換192.168.100.0/24 的內部網路,用PPPoE撥接後,可以藉由10.0.2.15的IP位置來連上WAN或網際網路 */

啟動 PPPoE service
$  pppoe-server  -I  eth1   -L  192.168.100.100  -R  192.168.100.10  -N  10  
/*  在 eth1 上啟動 pppoe 服務,並且使用的IP起始為192.168.100.100 至 192.168.100.10,僅允許10台機器連(撥)入,並設定 pppoe 伺服器的 ip 為192.168.100.100  */

連入端的部份,若是 Linux 系統連入,可使用指令 pppoe-setup,如以下問答來設定(圖4-77-1,4-77-2)





































(圖4-77-1)





































(圖4-77-2)


設定完後,就會在/etc/sysconfig/network-scripts/ifcfg-ppp0 ,的網路連線設定檔(圖4-78)
























(圖4-78)

     若為Windows系統,則使用如圖4-79步驟,以 Windows 10 為例,從傳統控制台或新版控制台(擇一操作即可)。進入後,如圖4-79下上的圖示,進入網路與網際網路,接著會進入設定利用何種方式的連線(圖4-80,擇一種控制台介面即可)。選擇撥號連線,並進入如圖4-80右方視窗,選擇連線到網際網路。







































(圖4-79)




































(圖4-80)


     緊接著便進入選擇您要連線的方式,如圖4-81上,有寬頻(PPPoE)與撥號,我們要選擇連線方式為PPPoE,撥號為更早的年代,利用 56K MODEM(https://en.wikipedia.org/wiki/Modem)來撥電話號碼連線的方式。選擇PPPoE後,便會出現輸入寬頻的使用者名稱與密碼的視窗,請輸入前段架設 PPPoE Server 所允許連入的帳號密碼即可連入。








































(圖4-81)

     以上為 VPN 方式從外部網域連入私有網域的伺服器軟體設定方式,與 PPPoE 方式從內部網域,連出到網際網路的伺服器軟體設定。VPN是中小企業常見讓員工可以24小時待命,連線工作的有效方法,且 PPPoE 為 ADSL 常見的連(撥)入ISP,來連線至網際網路的方式,且深入至現代幾乎每個家庭。這些在 Linux 作業系統內,都可以來實作使用,一般使用者亦可以買無線或有線路由器,也可以有 VPN 的功能可利用,或是利用路由器的 PPPoE Client 軟體能力,來隨時連結各大 ISP 所提供的 ADSL,而隨時供應著有線的網際網路連線,也都是很常見的應用。




If you have any feedback or question, please go to my forum to discuss.

這個網誌中的熱門文章

Linux操作不求人 - 伍章之伍 - make 巨集式編譯器

Linux 操作不求人系列 - 貳章之壹 - Shell Script 程式設計(I) - BASH

Linux操作不求人 - 肆章之貳 - 伺服器架設(II) - 郵件伺服器 - postfix 與 dovecot