使用ocserv搭建 Cisco Anyconnect 服務器

前段時間的appleID被盜事件鬧的沸沸揚揚,我果斷回到獄中升級了9.0.這下好了,Shadowsocks不能用了。這一點來講我還是挺羨慕Android手機的......使用 Surge 讓 iOS 走 Shadowsocks實現科學上網。

總之,我們還是來在iOS的VPN上下下功夫吧。如今的VPN已經被認證的差不多了,因為它們雖然加密安全,但禁不住特徵檢測——好吧,畢竟說這東西就不是為了隱匿而生的。目前倒是我思科大爹還有個anyconnect在活著,不是它多麼堅挺,而是用的企業太多,沒法禁,而且,它還有斷線自動連接,自動國內外按需分流等諸多的好處——最大一點:不需要越獄。

注意:

我使用的是數字海洋的VPS,Ubuntu的 15.04 ,整個的配置步驟是我一邊配一邊記錄的,是完全可行的,但由於系統環境複雜,每個人都不盡相同,所以你具體操作的時候可能仍舊需要靈活運用!


0、關於PAC的問題

我們經常說,Cisco 的 的AnyConnect無法使用PAC的,因為它的機制不同,不是代理而是 VPN,所以本文使用的方法是從服務器直接下發一些路由條目——由於客戶端限制,我們總是不能下發完整的路由表(只有200來條),這一點始終是廣大 AnyConnect 的一塊心病。總之,其實還有另外的一個辦法,對於那些需要全局vpn但又想區分網絡的企業,Cisco 還是有對應辦法的。

那就是讓服務器走代理。?

這就需求你有一台中國的vps來作為前置,並且這台vps使用比如 Shadowsocks 等工具連到你的國外 vps 上,然後再在中國 vps 上搭建ocserv,然後給它配置pac文件,這樣ocserv就會根據你的代理策略來實現路由。總之,如果你想嘗試這個方法,請直接跳轉頁面底部的 [參考文章] 小節,“移步 Anyconnect VPN使用PAC來智能分流” 這篇文章進行參考。

1、配置環境

這一步參考我之前寫的一篇文章——如果你的vps是全新的,否則跳過吧~

2、架設OpenConnectServer

2.1下載源碼

從這裡查看ocserv的最新版本號,你不需要點到FTP裡看,只要安裝格式替換鏈接路徑就行了。比如現在最新的版本是0.10.8,那麼你就把地址寫成這樣: FTP://ftp.infradead.org/pub/ocserv/ocserv-0.10.8.tar.xz ,好,我們現在來下載源碼:

2.2 安裝依賴

下載解壓好了代碼,就需要安裝一些依賴了,些是需要的,有些則是可選的,這裡我們盡可能的安裝所有依賴,萬一將來用得著呢!畢竟也就十來兆的大小。

如果沒有什麼問題,那就可以安裝了,比如我這裡的結果是這樣的:

2.3 編譯安裝

使用make命令來編譯和安裝:

3、配置O​​penConnectServer

3.1準備證書

安裝證書工具 易於-得到 安裝 GNUTLS-箱子

在此目錄下創建一個名為 .TMPL 的CA證書模板,寫入如下語句:

使用 certtool --生成-的privKey --OUTFILE -.ESTAB 生成CA密鑰;

使用 certtool --生成-- --加載-的privKey -.ESTAB --模板 .TMPL --OUTFILE -證書.ESTAB 生成CA證書;

然後我們生成服務器證書,這裡註意cn項必須對應你服務器的域名或IP,模板名稱是 服務器.TMPL ,內容如下:

使用 certtool --生成-的privKey --OUTFILE 服務器-.ESTAB 生成密鑰;

使用 certtool --生成-證書 --加載-的privKey 服務器-.ESTAB --加載--證書 -證書.ESTAB --加載--的privKey -.ESTAB --模板 服務器.TMPL --OUTFILE 服務器-證書.ESTAB 生成server證書;

把證書移動到合適的地方:

3.2 準備配置文件

我們把配置文件放到ocserv默認讀取的位置:

配置文件可以參考官方手冊來寫,不過這裡我們重點要確保以下條目正確:

3.3 測試服務器

現在,我們就可以來測試一下服務器了,使用命令來創建一個測試賬號:

如果你使用的也是Ubuntu系統,那你可以按照我寫的這篇文章來開啟NAT轉發;

使用 iptables的 -ŧ NAT -大號 來驗證轉發是否開啟成功:

這時,我們就可以使用 ocserv -F -ð 1 命令來啟動下服務啦!

打開你手機上的Cisco Anyconnect新建一個VPN,添加服務器IP就是你的vps的 IP:端口

好了,如果你看到如下信息,那服務器應該已經能夠正常運行了:

3.4 優化OpenConnectServer

好了,既然服務器已經可以跑起來,那麼我們就可以優化它了,首先,來寫個啟動腳本——畢竟,不能每次都用調試模式啟動不是嗎?

如果你和我一樣使用的是 Ubuntu 15.04 而不是舊版,那麼你需要參考這篇文章來找回一下upstart才能使用下邊的腳本。

在配置文件中寫入如下腳本:

這樣,我們就可以使用 服務 ocserv 開始服務 ocserv 停止來控制服務了。

3.5 創建客戶端證書,省的老輸入密碼

寫入如下內容:

將證書和密鑰轉為PKCS12的格式,好導入Anyconnect:

期間會要求你輸入證書名字和密碼。

然後你需要把這個證書放到一個可以被直接訪問的地方,然後通過URL將user.p12文件導入AnyConnect,具體位置在診斷標籤頁的證書欄目下,導入成功之後,將對應的VPN設置的高級設置部分的證書欄目,改為導入的這張證書。

現在,為了讓服務器能夠認得這張證書,我們再來修改一下配置:

這樣,我們使用 服務 ocserv 開始 來啟動它即可!

4、智能分流

好了,一般來講,如果你的是一個穩定且速度不慢的國外vps,那你現在就可以開始享受生活了!不過,我們的任務還沒用結束,手動切換總不能說的上是智能,我們使用現成的。

HTTPS://github.com/don-johnny/anyconnect-routes/blob/master/routes

不過我沒有全寫,只寫了部分進去——我主要是刷推~

好了,就到這裡吧!

ocserv

ocserv

參考文章:

折騰筆記:架設OpenConnect Server給iPhone提供更順暢的網絡生活

Anyconnect VPN使用PAC來智能分流

 

 

本文由 落格博客 原創撰寫:落格博客 » 使用ocserv搭建 Cisco Anyconnect 服務器

轉載請保留出處和原文鏈接:https://www.logcg.com/archives/1343.html

關於作者

R0uter

如非聲明,本人所著文章均為原創手打,轉載請註明本頁面鏈接和我的名字。

註釋

  1. ocserv -f -d 1啟動服務能正常使用。service ocserv start 運行後,輸入ip連接服務器,點擊繼續後,就提示無法連接服務器。什麼原因?

    1. ping 服務器能通嗎?
      curl 一下試試?通常來說,gfw 會在你連接的第一時間阻斷並拉黑,嘗試換個隨機端口,並用國外服務器跑客戶端連一下確認到底是gfw還是服務沒有配對。

      另外,確保你端口可訪問,比如服務器的防火牆,還有如果你用的雲服務的話,通常平台自身還有個默認防火牆,可能只開了22端口,也要開一下。

      1. ocserv -f -d 1跟service ocserv start啟動區別是什麼?
        ocserv -f -d 1啟動,手機Cisco Anyconnect能賬號密碼登錄,能訪問谷歌等外網。就表示防火牆端口什麼的都沒問題吧。
        切換到service ocserv start啟動,連接服務器,點擊繼續後,就提示無法連接服務器。

  2. 您好,想請教一下。
    參考您的文章搭建好了服務之後,AnyConnect可以連接,但是連接之後並不能訪問google.
    我嘗試了
    telnet ip port 和nc命令測試了TCP和UDP
    iptables -t nat -L 結果也和您的一致
    net.ipv4.ip_forward=1沒有註釋
    您能給個思路嗎,謝謝

    1. 首先看看你服務器機房在哪,我們假如它在美西,那先試試比如訪問我的博客能不能通,這樣我們可以確定你是不是被dns污染了,dns污染是雙向的,不光面向國內,也面向國外的。
      然後是確保在服務器上curl 一下 google,確定服務器本身是通的
      你telnet了 ip 是通的,說明本地訪問服務器沒問題,那我猜測很有可能是DNS解析的問題(尤其是僅Google這一類被牆的網站打不開的話,從這方面下手試試

      另外現在wireguard這類工具可能要比anyconnect好很多,畢竟後者現在應該已經能被gfw識別並屏蔽了………………

      1. 我的這個服務器,一直部署的IPSec使用,服務器本身是沒有問題的。
        但是IPSec對windows支持很差,需要修改註冊表、DNS和組策略等等問題,前些日子了解到了ocserv就想嘗試一下。
        哪知道又冒出來個wireguard,還是眼界窄,頭一回聽說這玩意

        1. 根據我當年部署這東西的經驗,gfw是見一個封一個,可能之前你服務器正常,但他掃到這個,就開始乾擾了。這也是我很快就放棄它的原因,它只是加密,不混淆,一般很難活的長久。
          wireguard是比較新的產物,它代碼量小但性能高,是用UDP發包,但在一些運營商中可能會對UDP進行限制,效果不一定是最佳的,但肯定比 AnyConnect 要好使的。

  3. 博主求指教 最後make的時候出錯了 回去翻了下 問題應該是出在這裡 這幾個庫我都是有的 要如何把他們添加到編譯路徑去?謝謝
    當地talloc: 沒有
    當地的protobuf-C: 沒有
    當地PCL庫: 沒有
    當地libopts: 沒有
    本地HTTP分析器: 沒有

  4. R0uter:

    你好!

    本人比較外行,請教一件事,我也是使用的Digital Ocean的VPS,Ubuntu的 15.04 ,月費5美金那款,之前按照http://www.chedanji.com/ubuntu-shadowsocks/ 這篇帖子部署了Shadowsocks , 安卓手機和PC 都能翻了,現在準備按照你的這篇大作搭建Cisco Anyconnect 服務器,我可以直接操作嗎?和以前的Shadowsocks會衝突嗎?

    期盼回复,謝謝!

    1. 不用擔心,隨便配,我的vps現在兩個都跑著沒有任何問題!唯一需要注意的地方在於:避免端口衝突。只要注意這一點就ok了。不過,ac在我這速度不咋地,我已經準備卸載啦。推薦最新的surge!

發表評論

您的電子郵件地址不會被公開. 必填字段標 *