@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_COUNTRY,KEY_PROVINCE,KEY_CITY,KEY_ORG,KEY_EMAIL,KEY_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.crt,myvpn.crt,myvpn.key,myclient.crt,myclient.key,myvpndh.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.
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_COUNTRY,KEY_PROVINCE,KEY_CITY,KEY_ORG,KEY_EMAIL,KEY_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.crt,myvpn.crt,myvpn.key,myclient.crt,myclient.key,myvpndh.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.