使用OpenVPN搞定遠端辦公

genter發表於2018-08-26

歡迎訪問陳同學部落格原文
本文基於同事海偉的內部筆記整理,新增了httpbasic demo,client從付費的shimo換成了免費的tunnelblick。

背景:公司VPN僅支援IE瀏覽器,需在登入VPN賬戶後一直開著IE的視窗。這對於Mac使用者非常不友好,在下班之後、出差中、長期遠端辦公等場景時非常不便。

這是很多人可能遇到的場景,本文將介紹如何利用openvpn打通網路,不涉及openvpn原理,感興趣者可自行了解。

搭建VPN非常簡單,第一步是選取一臺內網伺服器部署openvpn server,第二步是用VPN客戶端連線。

OpenVPN server

前人栽樹,後人乘涼。dockerhub mdns/rancher-openvpn 這個映象可直接使用,支援httpbasic、ldap等認證方式。如果公司有ldap服務,可直接使用ldap作認證;如果想自行管理使用者密碼,可以簡單使用httpbasic。我將演示這兩種方式。

更多關於路由、DNS等相關配置,dockerhub上有更詳細的介紹。

首先,選擇一臺可以訪問你的目標網路的內網機器,機器需要分配公網IP(做IP對映之類都可以)。在上面以docker方式安裝openvpn server。

ldap 認證

docker run -d 
    --privileged=true 
    -e REMOTE_IP=example.com 
    -e REMOTE_PORT=1194 
    -e ROUTE_NETWORK=192.168.12.0 
    -e ROUTE_NETMASK=255.255.255.0 
    -e PUSHDNS=192.168.211.103 
    -e AUTH_METHOD=ldap 
    -e AUTH_LDAP_URL=ldap://example.com 
    -e AUTH_LDAP_BASEDN=`ou=employee,dc=example,dc=com` 
    -e AUTH_LDAP_SEARCH=`(&(employeeNumber=$username)(employeeType=0))` 
    -v /etc/openvpn:/etc/openvpn 
    --name=vpn 
    -p 1194:1194 
    mdns/rancher-openvpn
  • REMOTE_IP、REMOTE_PORT:可選項,openvpn server所在的主機和埠
  • ROUTE_NETWORK、ROUTE_NETMASK:可選項,如果你不想暴露整個網路出來,可以通過這個配置可以訪問的網路範圍。如果需要控制更多網路,參考dockerhub的 OPENVPN_EXTRACONF 變數。
  • PUSHDNS:可選項,配置push到VPN client的DNS
  • AUTH_LDAP_URL、AUTH_LDAP_BASEDN、AUTH_LDAP_SEARCH:必要,設定你的LDAP配置資訊。`

/etc/openvpn 是各項配置儲存的地方,最好mount到磁碟上,這樣以後出現問題時可以基於這些配置恢復openvpn server,不用去更新客戶端的配置。

執行容器後你需要等待幾分鐘(取決於機器配置),openvpn server需要生成私鑰、公鑰等資訊。客戶端的配置資訊可以在容器日誌或/etc/openvpn/client.conf 中找到,將內容拷貝出來儲存為 client.ovpn,下面介紹VPN客戶端時將用到。

client.conf資訊如下圖所示(圖片資訊不全,有刪減)。

ab26192b69584128a688836331a69cf2.png

httpbasic 認證

執行一個非常簡單的openvpn server做Demo,DNS、訪問控制等參考ldap的例子。

sudo docker run -d --privileged=true -p 1194:1194 
    -e REMOTE_IP=example.com 
    -e REMOTE_PORT=1194 
    -e AUTH_METHOD=httpbasic 
    -e AUTH_HTTPBASIC_URL=https://chenyongjun.vip/httpbasic 
    -v /etc/openvpn:/etc/openvpn 
    --name=vpn 
    mdns/rancher-openvpn
  • AUTH_METHOD設定為httpbasic
  • AUTH_HTTPBASIC_URL設定為你的認證服務URL,https://chenyongjun.vip/httpbasic 是我用部落格做的一個httpbasic認證demo。

下面用nginx做一個httpbasic認證的小例子。

location /httpbasic {
    auth_basic "nginx http basic demo";
    auth_basic_user_file /etc/nginx/sites-available/users;

    root /etc/nginx/sites-available/httpbasic;
}

auth_basic_user_file指向的檔案用於配置使用者/密碼,我在users 檔案中配置了兩個使用者:

user1:eQjd/6QJAvqE6
user2:eQjd/6QJAvqE6

密碼都是123456,是用 openssl passwd -crypt 123456 命令加密後的密文。

/etc/nginx/sites-available/httpbasic 目錄下建立了一個名為 httpbasic 檔案,內容為 ok

訪問 https://chenyongjun.vip/httpbasic 輸入配置的使用者/密碼即可通過認證,獲取到httpbasic檔案資源。

至此,基於ldap和httpbasic的兩種方式都已介紹完。下面介紹如何在Mac上使用vpn客戶端。

OpenVPN client

OpenVPN客戶端選擇很多,這裡選擇免費的 Tunnelblick,在官網直接下載,只有16M,很方便。

用 Tunnelblick 開啟上面儲存的 client.ovpn 客戶端配置檔案,將會新增一條VPN配置。

f47b313d70bc4d3ca710d4996116003a.png

連線client,輸入ldap或httpbasic中的賬戶密碼,會自動完成建立TCP連線、分配IP地址等一系列建立連線的過程,連線成功後會出現如下提示:

2acf2f9908284a5bba666898db24ee1c.png

至此,我們完成了OpenVPN server的搭建,並使用客戶端基成功連線,可以通過VPN訪問OpenVPN server 中設定的網段。

如果有國外的雲伺服器,順手搭建個VPN,給團隊內的夥伴們送上翻牆梯子,也是不錯的小福利。


歡迎關注陳同學的公眾號,一起學習,一起成長


相關文章