Error message

Deprecated function: The each() function is deprecated. This message will be suppressed on further calls in menu_set_active_trail() (line 2404 of /usr/share/drupal7/includes/menu.inc).

教學: 用 Ubuntu Linux (64bit) 環境使用 Juniper SSL VPN (免裝 32bit Java) (zh_TW)

Juniper SSL VPN 常被用在各種地方,包括台灣各國立大學也都有由 TWAREN 所提供的服務。
因為它對於 64bit Linux 的支援問題,要在 Ubuntu (Linux) 64bit 上使用並不容易。
如果你不希望只為了用它而得多裝一套肥大的 32bit Java,這篇就是你要的教學文

更新:因為 NPAPI 的支援問題, ncLinuxApp.jar 須手動下載。 - 2018/8/15

If you want English HOWTO, check English version HERE

概要

# 安裝函式庫
sudo apt-get install libc6:i386 zlib1g:i386 libgtk2-perl libwww-perl

# 取得檔案
wget https://raw.github.com/madscientist/msjnc/master/msjnc
wget http://mad-scientist.net/junipernc
chmod +x msjnc junipernc

# 瀏覽器開 SSLVPN 網站並下載 jar 檔

# 解出檔案
./msjnc

# 啟動 VPN
junipernc --nojava

SSL VPN 是什麼

VPN

VPN (虛擬私有網路) 是個讓人們能存取 NAT 防火牆內,位在 LAN (區域網路) 裡的主機和服務的方法。例如:從家裡或是出差時連線到公司的電腦。
有許多不同種類的 VPN,例如 PPTP、OpenVPN、Cicso OpenConnect 等等。

SSL VPN

SSL VPN 是其中一種 VPN,原本被設計來讓使用者只要有瀏覽器就能夠使用。
有些人將它視作是使用者最容易使用的方法,但前提是所有使用者都用 M$ Windows,或是廠商提供了足夠的跨平台支援
可惜的是 Juniper SSLVPN 的方案 (NetworkConnect client) 並沒有64 位元 Linux 的良好支援,所以我們得自己動手做點小修改。

工具

我們需要這些東西:

  • junipernc
  • msjnc
  • 瀏覽器 (Firefox 或 Chromium)
  • Java (你系統裡原本的 64bit Java 以及隨附的瀏覽器外掛)
  • 一點點基本的 32 位元函式庫
  • 幾個基本的 Perl 函式庫,這是為了支援圖形化的對話框。 (有了這個才能避免使用 32 位元 Java 提供的圖形界面)

在這個例子中,我們會使用 junipernc 來協助我們安裝,以及幫我們自動執行一些複雜的指令。
msjnc 只是用來取得我們需要的檔案。
瀏覽器只是用來下載 Juniper 的 SSLVPN 客戶端軟體 NetworkConnect
Java 只是用來處理一些安裝流程。若你還沒有安裝 Java,可以看看 這篇 有關 Oracle Java 的安裝教學文。

sudo apt-get install libc6:i386 zlib1g:i386
sudo apt-get install libgtk2-perl libwww-perl
wget https://raw.github.com/madscientist/msjnc/master/msjnc
wget http://mad-scientist.net/junipernc
chmod +x msjnc junipernc

或是你也可以從 這裡 下載 junipernc 及 這裡 下載 msjnc 。

流程

準備所需資訊

我們需要一些資訊來讓工具幫我們登入:

  • Network Connect URL or Server
  • username
  • Realm

Network Connect URL or Server 是你瀏覽器開啟 SSLVPN 登入頁面時的網址。
在我的例子中,長得像是這樣:

Juniper-SSLVPN-Login-Page-with-input-fields

準備所需檔案

我們得將所有需要的檔案放在系統裡。

1. 取得 .jar 以及其他檔案

內容更新:

這一步因現在 Firefox 限制了對 NPAPI 的支援,而不會自動執行 Java 外掛、下載 ncLinuxApp.jar 檔案了
需要改在 SSL VPN 網頁登入後,自行在網址列輸入 https://伺服器位址/dana-cached/nc/ncLinuxApp.jar 下載檔案,放入 ~/.juniper_networks 內,才能再用 ./msjnc 執行
- 2018/8/14 Jiazheng

登入 SSLVPN 後,你會看到 Network Connect -> Start,請點擊 Start

Juniper-SSLVPN-Network-Connect-Page

點選頁面右上角的「允許」讓 Java 執行。一路點允許、繼續。最後它會安裝失敗並有關於 32 位元相關的錯誤
莫驚慌!莫害怕!這是意料中的事,因為我們正在用 64 位元系統,而那個 Java 應用程式需要 32 位元的環境。
Juniper-SSLVPN-Plugin-Install-Failed-Box

檢查一下你家目錄中的這個目錄,你會看到 ncLinuxApp.jar 就安靜地躺在那裡,像個睡著的孩子:

bluet@clean:~$ ls -al .juniper_networks
總計 2032
drwxrwxr-x  2 bluet bluet    4096  3月 29 01:01 .
drwxr-xr-x 20 bluet bluet    4096  3月 29 01:00 ..
-rw-rw-r--  1 bluet bluet 2065489  6月 25  2014 ncLinuxApp.jar
-rw-rw-r--  1 bluet bluet      19  3月 29 01:01 whitelist.txt

2. 將檔案抽取出來

msjnc 這工具會像用了吸星大法一樣,幫我們把需要的檔案從 ncLinuxApp.jar 裡汲取出來

./msjnc

執行後它會無聲無息地結束,但若再檢查一下剛才的目錄,你會發現世界變得不一樣。

bluet@Zorya:~$ find ~/.juniper_networks/
/home/bluet/.juniper_networks/
/home/bluet/.juniper_networks/networkconnect.gif
/home/bluet/.juniper_networks/network_connect
/home/bluet/.juniper_networks/network_connect/version.txt
/home/bluet/.juniper_networks/network_connect/libncui.so
/home/bluet/.juniper_networks/network_connect/xlaunchNC.sh
/home/bluet/.juniper_networks/network_connect/ncsvc
/home/bluet/.juniper_networks/network_connect/ncdiag
/home/bluet/.juniper_networks/network_connect/NC.jar
/home/bluet/.juniper_networks/network_connect/META-INF
/home/bluet/.juniper_networks/network_connect/META-INF/IMPORTED.RSA
/home/bluet/.juniper_networks/network_connect/META-INF/IMPORTED.SF
/home/bluet/.juniper_networks/network_connect/META-INF/MANIFEST.MF
/home/bluet/.juniper_networks/network_connect/installNC.sh
/home/bluet/.juniper_networks/network_connect/ncsvc.log
/home/bluet/.juniper_networks/network_connect/getx509certificate.sh
/home/bluet/.juniper_networks/getx509certificate.sh
/home/bluet/.juniper_networks/ncLinuxApp.jar

3. 使用 32 位元 Java 執行 msjnc (請略過這個步驟,如果你不想多裝一個累贅的 32 位元 Java)

想安裝多一個累贅癡肥的 Java只為了這個 32 位元的鬼東西。
我用的是 240G SSD。速度快但是西北貴,我真的不想浪費我的硬碟空間在這幾乎用不到的 32 位元 Java。 但如果你堅持,或是你覺得你有一狗票硬碟可浪費,還有浪費電、浪費網路頻寬,那就這麼做吧。我制止不了你。
不然,別這麼做

安裝多餘的 32 位元 Java:

sudo apt-get install openjdk-7-jdk:i386

msjnc 有它自己的圖形界面,讓使用者能較容易地控制 VPN 連線,但它需要 32 位元 Java。
現在你可以在 Dash 中搜尋 Network Connect 並開始使用閃亮亮的圖形界面了。(歧視表情)

但我不是腦殘,指令列又酷又炫。好 CLI,不用嗎?

啟動 VPN,開始享受

現在我們該設定 VPN 並讓它執行了。

設定 VPN

因為一個 NetworkConnect bugUbuntu 16.10 或更新的版本(Linux Kernel 4.5 及之後的版本)請先執行這個指令,解法取自 Kernel 討論串

echo 0 | sudo tee /proc/sys/net/ipv6/conf/default/router_solicitations

執行 junipernc 且不要用 32 位元 Java

junipernc --nojava

第一次執行時,你會看到一些跳出的圖形對話框,詢問你有關 VPN 的資訊
我們在第一步驟時就已經準備好這些資訊了,此時不用更待何時,所以現在輸入吧。
一旦完成,系統裡會多出一個新的網路界面

bluet@clean:~$ ifconfig tun0
tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:10.99.1.30  P-t-P:10.99.1.30  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1400  Metric:1
          RX packets:16363 errors:0 dropped:0 overruns:0 frame:0
          TX packets:11128 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:500 
          RX bytes:20952021 (20.9 MB)  TX bytes:777393 (777.3 KB)

現在你可以 ping 看看你的辦公室電腦或是WhatIsMyIP 看看你的 IP,你已經進入 VPN 的裏世界了。
你也看看這兩個檔案中所儲存的 VPN 設定: /.vpn.default.crt

啟動 VPN

下次想要啟動 VPN 連線時,用一樣的指令即可。

junipernc --nojava

輸入密碼後,你就再度進入那神秘美好的世界了。

停止 VPN

當你工作完畢,想要斬斷魂結、斷開鎖鏈時,用這個指令斬斷 VPN 執行程序以斷開 VPN 的魂節。

sudo killall ncsvc

後記

我花了好幾個小時搞定讓它能動,然後花了整晚重複確認步驟、寫英文版 HOWTO,然後又寫中文版到早上...
希望這篇教學能為你節省時間,節能省碳,救了隻小貓、少砍一顆樹,促進世界和平大同。
享受吧!阿宅!

Add new comment