Raspberry Pi 翻牆機(Archlinux+Softether VPN)

幾年前因為要去上海寫論文,利用Intel的NUC在家裡放了一台電腦,專門翻牆用(為什麼要用NUC呢,其實一般PC也可以,但是又潮又小就是好),剛好最近在玩Raspberry Pi,就弄了一個Raspberry Pi的翻牆機

最終弄好之後就長這樣,把網路線和USB電源接到Raspberry Pi上就可以運作了
WP_20180615_23_01_53_Rich_LI

如果你也需要自己弄一台給自己用,請完成以下三個準備工作

  1. 買一片Raspberry Pi版子,如果要美觀可以連外殼一起買(蝦皮有,預估價格在台幣1700左右)
    1. 要記得順道買一張16G以上的MicroSD卡作為Pi的「硬碟」
  2. 下載Archlinux ARMv7版本,如果你懶得自己設定,可以直接下載我已經設定好的印象檔,請到此下載(Google Drive: https://drive.google.com/open?id=1l6WNTKqFdZ44f5ICoyhQUD0z3K6YnC75
    1. 請準備好一個不要用的隨身碟,等一下安裝的過程中會需要(安裝完就不用了)
  3. 搞清楚自己家的ADSL帳號密碼,如果忘了請洽中華(如果你不打算用ADSL,或者你家是插線後直接可用的社區固網,也請一路設定完之後參考文章最後的說明部分

請注意:VPN要正常運作,記得每個月要繳網路費和電費,可以比較看看網路費、電費加起來是否比和Express VPN之類的付費VPN服務誰比較貴

翻轉後請看設定方式

設定方式

以下都以我弄好的印象檔作為基準,由於過程中需要切換Windows和Linux系統,我會用圖示區隔(雖然我們也可以全部都用Linux完成全部的任務,但考慮到多數來看這篇文章的人可能都不習慣Linux,因此我只打算在必要的時候使用Linux)

如果你進入這篇文章只是想知道softether vpn設定,請點這裡快轉

之所以需要設定,是因為我們希望把Raspberry Pi插到ADSL上之後,會自動撥號,因此你必須手動把你家的ADSL帳號密碼預先填好,因此以下設定基本上只會做一次

  1. 首先,你得先把印象檔放到SD卡上面,如此一來就省去安裝Arch的時間
    1. 請先下載rufus(https://rufus.akeo.ie/),然後把SD卡放到電腦裡
    2. 開啟rufus之後,請按「選擇」,點選印象檔,然後按下執行,之後大約等待半小時,rufus就會把印象檔全部複製到SD卡中(務必等到結束才能把卡片抽離),由於Archlinux的安裝磁碟格式和Windows不相容,等到複製結束後,如果你看到「磁碟X未格式化」的Windows提示框,屬於正常現象
      繪圖 (28)
    3. 複製完之後,請退出SD卡,但不用關掉rufus,請下載ubuntu最新的版本的iso檔案(https://www.ubuntu-tw.org/modules/tinyd0/),插入隨身碟,再用rufus選好ubuntu的iso檔,把ubuntu複製到隨身碟裡面去
    4. Windows第一階段任務結束,請關機
  2. 請插入Ubuntu的隨身碟和放有Archlinux的SD卡,再把電腦開機,按下開機按鈕後,請按住F12(或者你的電腦有不同的Boot selector按鈕,請看一下說明書),之所以選擇ubuntu,因為畫面友善
    1. 電腦會出現一個可開機設備清單,請選擇你的隨身碟,接下來你會看到一個文字選單,預設值就是Try Ubuntu without install,請按一下Enter(Try代表不會傷害到你電腦裡原本的資料)
      grub
    2. 進入Ubuntu之後,請選右下角的九格Menu選單,打開終端機
      Ubuntu-LauncherBottom1
    3. 接下來請輸入以下指令(安裝f2fs的驅動,這樣才能編輯SD卡裡的檔案),中間如果系統問你任何問題都按Yes
      sudo add-apt-repository universe
      sudo apt-get install f2fs-tools
      
    4. 接下來需要掛載SD卡,首先要先確定SD卡的系統編號,請輸入以下指令
      sudo lsblk
      

      未命名
      很明顯,sdf就是那張16G的SD卡(每個人電腦上的磁碟機編號都不一樣,請自己確認清楚,以下指令裡面的sdX,請換成你自己的磁碟機代號)

    5. 接下來需要掛載SD卡,請輸入以下指令
      cd /mnt
      sudo mkdir root
      sudo mount -t f2fs /dev/sdX /mnt/root
      

      如果都沒有錯誤訊息,請輸入指令ls,你應該會看到類似下面的畫面
      未命名

    6. 接下來要開始編輯ADSL的帳號密碼了,如果是用社區固網的人可以忽略這一段,請輸入以下指令
      sudo nano etc/ppp/pppoe.conf
      

      ,從這裡開始,你會使用nano編輯器來修改設定,nano的使用方法和windows裡的筆記本邏輯一樣,唯一要注意的是,編輯結束後請按Ctrl+X才能退出,退出前請按Enter存檔
      未命名

    7. 我們需要修改以下這幾個檔案
      1. etc/ppp/pppoe.conf(ADSL連線設定檔,請修改第31行左右的USER欄位,改成你的ADSL帳號,格式可能為ABCDE123@hinet.net,改好後請退出)
      2. etc/ppp/pap-secrets(ADSL帳號密碼,請把我預留的yourhost和yourpass都改成你真正的帳號密碼,這裡的ADSL帳號應該要跟pppoe.conf裡的一模一樣)
      3. root/ipcheck.sh(IP修改通知,請填入你的Email,這樣每次重新開機後,翻牆機會自動寄給你他最新的IP位置,預設值是每週二五凌晨3點重開機更換IP,這樣的好處是GFW不可能真的封鎖整個中華的網段)
      4. etc/ssmtp/ssmtp.conf(IP修改通知的Email設定,請填入你的Hotmail/Gmail帳號密碼,這樣你才能收到通知信)
        1. 這裡要修改的東西包括
          1. root=你的Email
          2. hostname=請隨便填一個合理的網址,或者你自己的部落格位址,格式應該為(www.test.com)之類的
          3. AuthUser=你的Hotmail帳號
          4. AuthPass=你的Hotmail密碼
        2. 我預設值是用hotmail寄信,如果你要改成Gmail,請參考Arch的說明
          https://wiki.archlinux.org/index.php/SSMTP#Forward_to_a_Gmail_mail_server
        3. 通常一般人不會開啟Hotmail和Gmail的兩階段登入,因此帳號密碼就是你原本的帳號密碼,如果你開啟了兩階段登入,那你需要自己去Gmail和Hotmail裡面產生一個「應用程式密碼」,方法請自己Google

        因此最後你會輸入的指令和下面的圖類似,有些重複的指令請忽略
        未命名

    8. 都做好之後,請到右上角把Ubuntu關機,SD卡和隨身碟都拔掉,從這裡開始沒有隨身碟的業務了
  3. 請把SD卡插回Raspberry Pi背面的SD卡槽,Raspberry Pi接電、接網路,開機,我們不會直接在這台機器上操作,因此就這樣開機就好了
  4. Windows開機,請下載好Pietty(https://sites.google.com/view/pietty-project)來進行操作(如果你不喜歡Pietty,也可以下載Putty,Win10用戶也可以安裝系統內建的OpenSSH客戶端,以下操作都是用Win內建的SSH完成的)
    1. 開機後你應該會在Email裡看到Raspberry Pi寄了一封信通知你他的IP位置,接下來要針對Raspberry Pi做一些細部設定,否則這樣一直開機久了一定會被駭客攻擊
      繪圖 (1)
      請在Pietty中輸入剛剛收到的IP位置,同意連線
      繪圖 (2)
    2. 連線成功之後,請輸入帳號密碼,預設帳號密碼如下
      1. 帳號:alarm
      2. 密碼:kelun1111(如果不是,請試試看kelun111)
      3. 然後你會看到以下畫面
        繪圖 (3)

    3. 連上之後我們主要是要修改密碼,請把密碼換成你自己記得住的,總之不要用預設密碼在網路上裸奔就對了(首先我們要用su -命令,切換到root管理員帳號,root預設密碼也是kelun1111)
      passwd
      su -
      passwd
      

      請在此修改root的帳號密碼,可以和alarm一樣,但總之要你自己記得住,一個個passwd是改alarm的密碼,第三個passwd是改root的密碼

      接下來我們需要新增一個你自己的帳號,alarm以後就不要用了,第一步指令是建立帳號,第二步指令是設定密碼

      useradd -m -g wheel 你的帳號
      passwd 你的帳號
      

      接下來我們要關閉alarm的管理員(sudoer)權限

      visudo -f /etc/sudoers
      

      請移動到這個文件的最底部,找到alarm ALL=NOPASSWD,把alarm改成你的帳號名稱,退出nano並存檔

      最後,我們需要修改這台機器的名稱,這一部可作可不做

      nano /etc/hostname
      

      把alarmpi改成你喜歡的名稱,然後就可以退出nano,為了方便起見,最後重新開機一下

      reboot now
      

    4. Raspberry Pi重開機之後,大約一分鐘內你會收到新的IP通知信,接下來請先去softether的網站下載VPN管理器(http://www.softether-download.com/cn.aspx?product=softether
      繪圖 (28)
      安裝的時候請注意,我們不需要在自己的PC上安裝VPN伺服器,我們只需要安裝「管理工具」
    5. 接下來要開始設定VPN了,主要就是設定好VPN的連線網址和帳號而已,首先,請開啟管理工具,然後按下「新設置」
      繪圖 (9)
    6. 名稱自訂,網址請輸入Raspberry Pi的IP位置,密碼先留白
      繪圖 (10)
    7. 設定好之後,在VPN主機列表裡點兩下,電腦會要求你先設定密碼,然後就會看到設定精靈了,請選擇你要的是遠程訪問的VPN
      繪圖 (11)
    8. 接下來softether會送你一個動態網址(DDNS),請把他給的亂數網址設定成你記得住的,否則以後你每天翻牆前都要看Email才知道自己今天的IP是什麼,所謂的動態網址就是隨時可以根據IP位置改變的網址,非常適合架設VPN使用
      繪圖 (12)
    9. 請開啟L2TP,並設定好L2TP連線金鑰,不要用預設的"vpn”
      繪圖 (13)
    10. 如果你是直接連接ADSL,而不是把raspberry pi放在wifi分享器後面,你就不需要開啟VPN Azure,請選擇關閉(如果你希望把VPN放在你自家的wifi分享器後面,請看本文最後的說明)
      繪圖 (14)
    11. 請設定一個連線VPN的帳號(就填入帳號密碼即可),本地網橋請不要設定(如果他自帶了,等一下我們再刪除掉)
      繪圖 (16)
    12. 如果他剛剛有自帶的本地網橋,請到此刪除
      繪圖 (28)
    13. 接下來要設定NAT,我們要強制指定DNS主機,以免GFW發動DNS汙染,首先,先開啟NAT
      繪圖 (28)
    14. 然後點選「NAT配置」,設定好NAT資訊,大致上填的跟下圖一樣就好了
      繪圖 (20)
      你可以自己修改10.0.5.x為,10.0.x.x OR 192.168.x.x (x:1~255),請注意,虛擬主機網路接口設置裡的IP位置必須跟默認網關一模一樣,分配位置則代表你可以最大接受幾個客戶端連線,最重要的是DNS,我目前選擇是Cloudflare和Google的DNS,你也可以換成別的
    15. 到此設定結束!請一路按著確定關閉所有VPN設定視窗,我們最後須要把VPN主機的網址從IP改成剛剛附贈的DDNS,請在列表頁點選「編輯設置」,之後把主機網址改成你剛剛設定好的虛擬網址繪圖 (17)
    16. 請在Windows裡面新增VPN,Windows 10的VPN放在設定\網路裡面,詳細參數請參考下圖(Android和iOS都支援L2TP,參數類似)繪圖 (18)
    17. 連線成功之後,請打開瀏覽器,在Google裡面輸入 what is my ip,對照看看和你的Email中收到的IP是否一樣,一樣就代表你翻牆成功了繪圖 (21)

補充說明

Q:為什麼要用Raspberry Pi?(一般的PC不行嗎)

一般的PC當然可以,考慮Raspberry Pi完全基於以下特性

  1. 省電,Raspberry Pi你只需要準備好一組手機的充電器插上去就可以了
  2. 小,假設你是要放在辦公室來穿牆,除非你家網管特別有心否則從物理上也是很難找到你的,而除非你玩太大,流量監控也找不太出什麼異狀來
  3. 對於想要用PC來當翻牆機的人,你可以直接在Windows上安裝softether的伺服器,設定方法一樣可以參考本文提到的設定部分
  4. 為什麼我要用Arch,而不是Pi官方的Debian,因為潮

Q:為什麼要使用softether VPN?(PiVPN是用OpenVPN)

OpenVPN在實測上速度比較慢,所以並不考慮,除此之外,softether還有以下優點

  1. softether VPN也支援OpenVPN,而且事實是L2TP支援的平台比較多,速度還快很多
  2. softether VPN還有更強大的VPN Azure模式,利用SSTP直接支援防火牆內穿牆,也就是,你可以把Raspberry Pi直接放在辦公室裡,穿牆不只可以對付GFW,辦公室也是可以來往自如

Q: 你都把翻牆機用在什麼地方?

其實我主要是放在辦公室用… VPN還是比TeamViewer穩定速度又快

Q: Raspberry Pi需要定時維護嗎?(例如定時關機讓機器休息一下?)

目前測試結果是應該不需要,晶片的溫度應該都是在40-70度之間(而且你個人使用也玩不了多大的),另外為了避免GFW封鎖IP,機器設定每周二、五凌晨3點自動重開機,這樣也會同時清空記憶體,照理說就這樣一直開著就沒事了

不過,如果你無聊的話,可以定期連入翻牆機,輸入以下指令更新系統(系統更新指令在Linux裡建議不要排程執行,因此請手動執行)

packer -Syyu

Q: Raspberry Pi可以遠端喚醒嗎?

都賣你才一千多了要求還真多… 沒有!(你可能需要考慮接一個媽媽拿去控制電鍋的定時器,就能「排程」開機了)

Q:我可以不要用ADSL,直接用wifi分享器、有線網路分享器等等嗎?

請注意,以下方案當然可行,但蘋果全家族(iOS/MacOS)都不支援SSTP,因此就算你設定好了,蘋果系統依然不可以跟翻牆機連線

當然可以,我之所以考慮用ADSL,主因在於我希望切開自家的區域網路和翻牆機,再者說中華電信ADSL附贈7個IP位置不用可惜,如果你要用區域網路,請在VPN設定精靈中,啟動VPN Azure,然後在客戶端請用SSTP連線(不能用L2TP)

要關閉ADSL,請連入翻牆機後,輸入以下指令,關閉開機後自動連線ADSL

sudo systemctl disable adsl

如果你連網路線都不想接,而是想讓翻牆機連上wifi後分享wifi,請參考以下文章:https://wiki.archlinux.org/index.php/wicd#Running_Wicd_in_Text_Mode

如果你的網路環境還特別有鎖網路卡的MAC位置,這時你就需要特別偽造一下MAC位置,請參考:https://wiki.archlinux.org/index.php/MAC_address_spoofing_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)

Q:我可以不要再收到IP位置變更的通知信,或者是我可以改變一下定時重開機的時間嗎?

當然可以,請連入Raspberry Pi之後,修改定時器設定

su -
export VISUAL=nano; crontab -e

繪圖 (25)

當你刪除第一行和第三行之後(刪除一整行,請按Ctrl+K),定時IP通知器就會被關閉了(如果你只是想更改定時器的執行時間,請自己去試試看新的時間組合:https://crontab.guru/),如果要更進一步刪除掉ADSL連線成功後的IP通知,請輸入以下指令

sudo rm /etc/ppp/ip-up.d/20-checkip.sh

Q: 為什麼我還是被GFW給切斷網路了?

畢竟GFW沒有人公開承認存在的東西,因此被GFW切斷有以下可能,以下分成我遇過的兩種情況,端傳媒上也曾經有報導過(https://theinitium.com/article/20150904-mainland-greatfirewall/

  1. 你所在地區發生敏感事件,例如北京兩會,某地發生群眾性事件,GFW層級升高,如果是這樣,L2TP VPN可能會被GFW偵測出它的封包特徵之後遭到干擾
    1. 解決方法(不一定有效):請考慮轉用OpenVPN,或者是PC端的話請下載softether VPN的專用客戶端連線工具,手機端無解
    2. 經驗上這樣玩的話你大概可以維持半小時的連線
  2. 你可能只是被DNS汙染而已,所謂DNS汙染就是邏輯上Google的IP位置應該是1.2.3.4,但GFW為了不讓你連上Google,故意給你5.6.7.8,導致你打不開網頁
    1. 解決方法1(不一定有效):請強制指定你自己電腦的DNS主機為1.1.1.1或者是8.8.8.8,請看下圖
      繪圖 (28)
    2. 解決方法2:和上面一樣,改用OpenVPN,你可以在VPN管理器那邊下載到softether的OpenVPN設定檔
      繪圖 (28)
      然後,請在OpenVPN設定檔中,補上這兩行
      dhcp-option DNS 1.1.1.1

      dhcp-option DNS 8.8.8.8
      繪圖 (28)

Q: 我同學說他們還可以用SSR翻牆,那是啥?

基於現在的GFW在特殊敏感時期會直接使用封包特徵偵測,而且大陸並沒有開放IPv6的狀況下,大神發明了Shadowsocks這種代理伺服器,但你依然得準備一台境外的伺服器來進行SSR連接

我是覺得你已經用台灣的浮動IP了,要被ban IP的機率極低,因此在此不考慮用SSR翻牆,但如果你有興趣,可以參考這篇文章自己安裝SSR Server: https://wiki.archlinux.org/index.php/Shadowsocks

Q: 這樣裝的VPN主機,安全嗎?VPN軟體會不會偷我的資料?(還有本文作者會不會偷你的資料?)

我只是期末無聊出來寫篇文章,對你的資料沒有興趣,如果你部安心,可以根據本文最後提到的相關文章自己一路從SD卡裝到softether之後再回來本文看設定…

至於Arch和softether會不會偷你的資料?這兩套都是開源軟體,人家都裸奔給你看了,還能保留什麼?

相關資料

如果你想從頭自己裝,可以參考以下這幾篇

  1. https://www.zybuluo.com/yangxuan/note/344907
  2. https://blog.fooleap.org/using-archlinux-with-adsl.html

對「Raspberry Pi 翻牆機(Archlinux+Softether VPN)」的一則回應

  1. 您好,看您的網誌有買過iriver t30`,因為在蒐集舊款mp3,可否跟您購買?
    請與我聯絡0919840736姚先生bom1017@yahoo.com.tw

發表留言

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料