在Linux下連接openvpn 使用Python

在Linux下連接openvpn 使用Python

本篇會分成以下幾個步驟

  1. 安裝openvpn
  2. 配置Ubuntu sudo NoPassWD
  3. 配置.ovpn檔案
  4. Coding
  5. 測試

一、安裝openvpn

沒什麼技術性,打開終端機直接輸入sudo apt install openvpn(ubuntu)

二、配置Ubuntu sudo NoPassWD

說明一下這步驟為什麼要配置,在command line 模式下若要連接openvpn,語法如下

sudo openvpn --config myopenvpn.ovpn

輸入完,終端機會要求你輸入密碼,這會造成我們在撰寫程式時的困擾,所以直接進入重頭戲,修改sudoers

你可以使用以下語法,預設使用vi來編輯

sudo visudo

或者你可以使用vim來編輯

export VISUAL=vim; visudo

我是使用vim來做編輯,按I進入編輯模式,在最下面添加一行

myusername ALL=(ALL) NOPASSWD:ALL

按esc,之後輸入:wq!來強制覆寫並離開

三、配置.ovpn檔案

我是使用Astrill這家Vpn服務商,直接進入後台下載檔案即可,解壓縮放到你想放的位置,為了節省麻煩我放在專案的目錄下

四、Coding

import subprocess
command = [“sudo”,”openvpn”,” — config”,”taiwan.ovpn”]
process = subprocess.Popen(command,stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE)

這邊備註一下subprocess.Popen 並不會堵塞父進程,詳細的資料請自行Google

五、測試

time.sleep(5)# 這裡是等待連接,由於不堵塞父進程所以需要等待一下
try:
ip = requests.get("https://myip.com.tw/")
print(re.search('\d+\.\d+\.\d+\.\d+', ip.text).group(0))
except:
print("Error")
#關閉所有vpn
os.system("sudo killall openvpn")

參考連結