openSUSE搭建OpenVPN

openSUSE搭建OpenVPN

文:鐵樂與貓
2018-9-19

環境

  • openSUSE Leap 42.3

  • openVPN 2.3.8(推薦直接使用zypper命令安裝)

  • windows端:openvpn-install-2.4.6-I602.exe

  • 注:本教程雖然是在openSUSE下操作,但和CentOS下是一樣能走得通的,除了安裝時將zypper換成yum而已。

安裝openVPN服務端

  • 爲了減少依賴的問題,我選擇了直接使用zypper安裝而不是源碼安裝的方式:
operation@opensuse-wordpress:~> sudo zypper in openvpn
[sudo] password for root: 
Retrieving repository 'openSUSE-42.3-Update-Oss-0' metadata ..................................................[done]
Building repository 'openSUSE-42.3-Update-Oss-0' cache .......................................................[done]
Loading repository data...
Reading installed packages...
Resolving package dependencies...

The following 3 NEW packages are going to be installed:
  libpkcs11-helper1 openvpn pkcs11-helper

3 new packages to install.
Overall download size: 519.7 KiB. Already cached: 0 B. After the operation, additional 1.2 MiB will be used.
Continue? [y/n/...? shows all options] (y): y
Retrieving package libpkcs11-helper1-1.11-5.3.x86_64                           (1/3),  42.1 KiB (115.2 KiB unpacked)
Retrieving: libpkcs11-helper1-1.11-5.3.x86_64.rpm ............................................................[done]
Retrieving package pkcs11-helper-1.11-5.3.x86_64                               (2/3),  17.0 KiB ( 30.0 KiB unpacked)
Retrieving: pkcs11-helper-1.11-5.3.x86_64.rpm ................................................................[done]
Retrieving package openvpn-2.3.8-14.1.x86_64                                   (3/3), 460.6 KiB (  1.1 MiB unpacked)
Retrieving: openvpn-2.3.8-14.1.x86_64.rpm ....................................................................[done]
Checking for file conflicts: .................................................................................[done]
(1/3) Installing: libpkcs11-helper1-1.11-5.3.x86_64 ..........................................................[done]
(2/3) Installing: pkcs11-helper-1.11-5.3.x86_64 ..............................................................[done]
(3/3) Installing: openvpn-2.3.8-14.1.x86_64 ..................................................................[done]
Additional rpm output:
systemd service openvpn.service does not exist.
  • 安裝完成後,使用locate openvpn可檢索到相關的目錄和文件:

主要的有:

/etc/openvpn(此目錄目前爲空)
/usr/sbin/openvpn(主程序)
/usr/share/doc/packages/openvpn(這個目錄下有很多相關的包)
/usr/share/doc/packages/openvpn/sample-config-files(這個目錄下有配置文件的簡單案例)
/usr/share/doc/packages/openvpn/sample-keys/(這個目錄下也是keys密鑰的示例)
/usr/share/doc/packages/openvpn/sample-scripts/(腳本例子)
  • 目前openvpn還沒有加進環境變量中,不過我們使用絕對路徑去運行它,可以觀看到版本和相關的參數:
operation@opensuse-wordpress:/etc/openvpn> /usr/sbin/openvpn --version
OpenVPN 2.3.8 x86_64-suse-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [MH] [IPv6] built on Aug  4 2015
library versions: OpenSSL 1.0.2j-fips  26 Sep 2016, LZO 2.08
Originally developed by James Yonan
Copyright (C) 2002-2010 OpenVPN Technologies, Inc. <[email protected]>
Compile time defines: enable_crypto=yes enable_crypto_ofb_cfb=yes enable_debug=yes enable_def_auth=yes enable_dependency_tracking=no enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown enable_fast_install=needless enable_fragment=yes enable_http_proxy=yes enable_iproute2=yes enable_libtool_lock=yes enable_lzo=yes enable_lzo_stub=no enable_management=yes enable_multi=yes enable_multihome=yes enable_pam_dlopen=no enable_password_save=yes enable_pedantic=no enable_pf=yes enable_pkcs11=no enable_plugin_auth_pam=yes enable_plugin_down_root=yes enable_plugins=yes enable_port_share=yes enable_selinux=no enable_server=yes enable_shared=yes enable_shared_with_static_runtimes=no enable_small=no enable_socks=yes enable_ssl=yes enable_static=yes enable_strict=no enable_strict_options=no enable_systemd=yes enable_win32_dll=yes enable_x509_alt_username=yes with_crypto_library=openssl with_gnu_ld=yes with_mem_check=no with_plugindir='$(libdir)/openvpn/plugins' with_sysroot=no

安裝easy-rsa工具

該工具用於製作ca證書,服務端證書,客戶端證書。在github上看到最新的版本爲v3.05。

github地址:https://github.com/OpenVPN/easy-rsa/tree/v3.0.5

  • 使用wget下載zip包並解壓
wget https://github.com/OpenVPN/easy-rsa/archive/v3.0.5.zip
unzip v3.0.5.zip
  • 將解壓得到的文件夾easy-rsa-3.0.5重命名並複製到/etc/openvpn以便於使用。
sudo cp -R easy-rsa-3.0.5/ /etc/openvpn/ easy-rsa

配置vars文件

  • 進入/etc/openvpn/easy-rsa/easyrsa3目錄

    cd /etc/openvpn/easy-rsa/easyrsa3/
    
  • 複製vars.example爲vars
    sudo cp vars.example vars

  • 修改下面字段

    • 命令:sudo vim vars,然後修改91到96行,最後wq保存
    //以下字段根據自己實際情況更改,這些信息前面是有#註釋的,去掉#號
    
    set_var EASYRSA_REQ_COUNTRY “CN” #國家
    set_var EASYRSA_REQ_PROVINCE “GuangDong” #省份
    set_var EASYRSA_REQ_CITY “GuangZhou” #城市
    set_var EASYRSA_REQ_ORG “tielemao” #非盈利組織,此處可填公司之類
    set_var EASYRSA_REQ_EMAIL “[email protected]” #郵箱地址
    set_var EASYRSA_REQ_OU “My OpenVPN” #組織單元
    

創建服務端證書及key

  • 進入/etc/openvpn/easy-rsa/easyrsa3/目錄,進行初始化sudo ./easyrsa init-pki
operation@opensuse-wordpress:/etc/openvpn/easy-rsa/easyrsa3> sudo ./easyrsa init-pki
[sudo] password for root: 

Note: using Easy-RSA configuration from: ./vars

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /etc/openvpn/easy-rsa/easyrsa3/pki

會在目錄下生成pki目錄,內含private和reqs文件

operation@opensuse-wordpress:/etc/openvpn/easy-rsa/easyrsa3> sudo ls -lh pki
total 8.0K
drwx------ 2 root root 4.0K Sep 14 17:11 private
drwx------ 2 root root 4.0K Sep 14 17:11 reqs

  • 創建根證書

    命令sudo ./easyrsa build-ca

    類似下圖:

    實際操作如下:

  operation@opensuse-wordpress:/etc/openvpn/easy-rsa/easyrsa3> sudo ./easyrsa build-ca
  
  Note: using Easy-RSA configuration from: ./vars
  Enter New CA Key Passphrase: 
  Re-Enter New CA Key Passphrase: 
  Generating RSA private key, 2048 bit long modulus
  .........+++
  ...................................................................................................+++
  e is 65537 (0x10001)
  You are about to be asked to enter information that will be incorporated
  into your certificate request.
  What you are about to enter is what is called a Distinguished Name or a DN.
  There are quite a few fields but you can leave some blank
  For some fields there will be a default value,
  If you enter '.', the field will be left blank.
  -----
  Common Name (eg: your user, host, or server name) [Easy-RSA CA]:yunwei_openvpn
  
  CA creation complete and you may now import and sign cert requests.
  Your new CA certificate file for publishing is at:
  /etc/openvpn/easy-rsa/easyrsa3/pki/ca.crt
  • 注意:在上述部分需要輸入PEM密碼(PEM passphrase),輸入兩次。

  • 此密碼必須記住,不然以後不能爲證書籤名。

  • 還需要輸入Common Name 通用名,自定義一個好記的。

  • 在生成證書時,切記Common Name 不能重複,CN類似一個人的ID。

  • 生成的根證書文件爲:/etc/openvpn/easy-rsa/easyrsa3/pki/ca.crt

  • 創建服務端證書

    命令:sudo ./easyrsa gen-req server nopass

    類似下圖:

實際操作如下:

operation@opensuse-wordpress:/etc/openvpn/easy-rsa/easyrsa3> sudo ./easyrsa gen-req server nopass

Note: using Easy-RSA configuration from: ./vars
Generating a 2048 bit RSA private key
.................................................................................................................+++
...........+++
writing new private key to '/etc/openvpn/easy-rsa/easyrsa3/pki/private/server.key.NlmOnoTKYW'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) [server]:yunwei_openvpn_server

Keypair and certificate request completed. Your files are:
req: /etc/openvpn/easy-rsa/easyrsa3/pki/reqs/server.req
key: /etc/openvpn/easy-rsa/easyrsa3/pki/private/server.key

同樣起個好記的通用名字,不過就不能和前面根證書的一樣。
生成的文件有兩個,注意這個時候這兩個文件還不是服務端證書:

req: /etc/openvpn/easy-rsa/easyrsa3/pki/reqs/server.req
key: /etc/openvpn/easy-rsa/easyrsa3/pki/private/server.key
  • 簽約服務端證書:
    • sudo ./easyrsa sign server server
    • 注,這裏前一個server是命令表示註冊的是server端,後一個server是可以自行定義的名字,
      但是要和前面命令起的名字一致,我這裏一致都是server。
      類似下圖:

實際操作如下:

operation@opensuse-wordpress:/etc/openvpn/easy-rsa/easyrsa3> sudo ./easyrsa sign server server

Note: using Easy-RSA configuration from: ./vars


You are about to sign the following certificate.
Please check over the details shown below for accuracy. Note that this request
has not been cryptographically verified. Please be sure it came from a trusted
source or that you have verified the request checksum with the sender.

Request subject, to be signed as a server certificate for 1080 days:

subject=
    commonName                = yunwei_openvpn_server


Type the word 'yes' to continue, or any other input to abort.
  Confirm request details: yes
Using configuration from ./openssl-easyrsa.cnf
Enter pass phrase for /etc/openvpn/easy-rsa/easyrsa3/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'yunwei_openvpn_server'
Certificate is to be certified until Sep  2 08:07:56 2021 GMT (1080 days)

Write out database with 1 new entries
Data Base Updated

Certificate created at: /etc/openvpn/easy-rsa/easyrsa3/pki/issued/server.crt

要輸入yes確認才能繼續操作下去,
輸入之前創建根證書的時候輸入的PEM密碼,如果忘記了就得從創建根證書重新做起了。
最終生成服務端的證書,crt格式:
/etc/openvpn/easy-rsa/easyrsa3/pki/issued/server.crt

  • 創建Diffie-Hellman,確保key穿越不安全網絡:
    sudo ./easyrsa gen-dh
    類似下圖:

  • 生成dh.pem文件: /etc/openvpn/easy-rsa/easyrsa3/pki/dh.pem

創建客戶端證書

  • 創建客戶端key及生成證書(記住和之前的創建服務端根證書操作一樣生成時是自己輸入的密碼)

    sudo ./easyrsa gen-req client-wwz //名字自己定義

如下圖:

同樣可看到和之前做服務端證書步驟一樣,生成了屬於客戶端的req和key文件:

req: /etc/openvpn/easy-rsa/easyrsa3/pki/reqs/client-wwz.req
key: /etc/openvpn/easy-rsa/easyrsa3/pki/private/client-wwz.key
  • 簽約客戶端證書

    sudo ./easyrsa sign client client-wwz

    這裏生成client所以必須爲client,client-wwz則要與之前導入名字一致
    上面簽約證書跟server類似,期間還是要輸入前面設置CA根證書時的PEM密碼。

    客戶端的證書client-wwz.crt路徑在/etc/openvpn/easy-rsa/easyrsa3/pki/issued/client-wwz.crt

疏理證書文件

現在梳理一下上面都生成了些什麼東西:

  • 服務端:etc/openvpn/easy-rsa/文件夾中

    /etc/openvpn/easy-rsa/easyrsa3/pki/ca.crt # 根證書
    /etc/openvpn/easy-rsa/easyrsa3/pki/reqs/server.req
    /etc/openvpn/easy-rsa/easyrsa3/pki/reqs/client.req
    /etc/openvpn/easy-rsa/easyrsa3/pki/private/ca.key # 根密鑰
    /etc/openvpn/easy-rsa/easyrsa3/pki/private/server.key # 服務端密鑰
    /etc/openvpn/easy-rsa/easyrsa3/pki/private/client.key # 客戶端密鑰
    /etc/openvpn/easy-rsa/easyrsa3/pki/issued/server.crt  # 服務端證書 
    /etc/openvpn/easy-rsa/easyrsa3/pki/issued/client-wwz.crt # 客戶端證書
    /etc/openvpn/easy-rsa/easyrsa3/pki/dh.pem
    
  • 可參照下表更爲清晰:

  • 將相關的服務器證書文件cp到/etc/openvpn目錄下。當然,文件留在原路徑也可以,只是在配置設置文件的時候寫入的路徑沒那麼簡潔。

    cp /etc/openvpn/easy-rsa/easyrsa3/pki/ca.crt /etc/openvpn
    cp /etc/openvpn/easy-rsa/easyrsa3/pki/private/server.key /etc/openvpn
    cp /etc/openvpn/easy-rsa/easyrsa3/pki/issued/server.crt /etc/openvpn
    cp /etc/openvpn/easy-rsa/easyrsa3/pki/dh.pem /etc/openvpn
    
  • 客戶端的文件則可以另找一個好記的目錄,比如/etc/openvpn/client放置,也可以直接等做客戶端設置的時候再直接放到客戶端中。

    mkdir /etc/openvpn/client
    cp /etc/openvpn/easy-rsa/easyrsa3/pki/ca.crt /etc/openvpn/client
    cp /etc/openvpn/easy-rsa/easyrsa3/pki/private/client-wwz.key /etc/openvpn/client
    cp /etc/openvpn/easy-rsa/easyrsa3/pki/issued/client-wwz.crt /etc/openvpn
    

服務端配置

文件都準備好後,就可以進行編寫服務端配置文件了。這就是磨刀不誤砍柴工,萬事俱備,只欠東風!

由於我們是zypper安裝的openvpn。
所以相應在``/usr/share/doc/packages/openvpn/sample-config-files目錄下會有一個server.conf`文件,如果找不到,也可以使用locate之類工具查找配置案例文件。

將這個文件複製到/etc/openvpn
sudo cp /usr/share/doc/packages/openvpn/sample-config-files/server.conf /etc/openvpn/

然後修改配置文件sudo vim server.conf如下:

local 172.16.1.128            # 填自己openvpn服務器的 IP,默認偵聽服務器上的所有ip
port 1194                     # 偵聽端口,默認1194,最好修改默認端口。
proto udp                     # 端口協議,默認udp,也可以開啓tcp方便映射轉發。
dev tun                       # 默認創建一個路由IP隧道
ca /etc/openvpn/ca.crt        # 根證書
cert /etc/openvpn/server.crt  # 證書
key /etc/openvpn/server.key   # 私鑰文件/重要保密
dh /etc/openvpn/dh.pem

server 10.8.0.0 255.255.255.0 
# 設置服務器端模式,並提供一個VPN子網,以便於從中爲客戶端分配IP地址。
# 默認是10.8.0.0這個網段。
# 服務器自身會使用10.8.0.1這個ip。

ifconfig-pool-persist ipp.txt 
# 指定用於記錄客戶端和虛擬IP地址的關聯關係的文件。
# 當重啓OpenVPN時,再次連接的客戶端將分配到與上一次分配相同的虛擬IP地址

push “route 172.18.0.0 255.255.0.0” 
# 推送路由信息到客戶端,以允許客戶端能夠連接到服務器背後的其他私有子網。
# (簡而言之,就是允許客戶端訪問VPN服務器自身所在的其他局域網)
# 記住,這些私有子網也要將OpenVPN客戶端的地址池(10.8.0.0/255.255.255.0)反饋回OpenVPN服務器。

push "redirect-gateway def1 bypass-dhcp" 
# 啓用該指令,所有客戶端的默認網關都將重定向到VPN,這將導致諸如web瀏覽器、DNS查詢等所有客戶端流量都經過VPN。
# (爲確保能正常工作,OpenVPN服務器所在計算機可能需要在TUN/TAP接口與以太網之間使用NAT或橋接技術進行連接)
# 這個指令其實挺影響客戶端處的網絡的,比如我就在vpn上阿里雲的服務器後,本地瀏覽網絡會出沒法訪問外網,有必要到阿里雲vpn服務器上註釋掉此指令,而且這樣也會導致雲服務器流量激增,並不利。

push “dhcp-option DNS 119.29.29.29″ 
# 某些具體的Windows網絡設置可以被推送到客戶端,例如DNS或WINS服務器地址。
# 實際上可用於推送內網dns或阿里內網dns等。

keepalive 10 120 
# keepalive指令將導致類似於ping命令的消息被來回發送,以便於服務器端和客戶端知道對方何時被關閉。
# 默認每10秒鐘ping一次,如果120秒內都沒有收到對方的回覆,則表示遠程連接已經關閉。比較頻繁,建議改成30 240?

comp-lzo 
# 在VPN連接上啓用壓縮。如果你在此處啓用了該指令,那麼也應該在每個客戶端配置文件中啓用它。

max-clients 100 #默認最大客戶端連接100,爲安全可限到1或2。
# 持久化選項可以儘量避免訪問那些在重啓之後由於用戶權限降低而無法訪問的某些資源。

persist-key
persist-tun

status openvpn-status.log # 狀態日誌
# 爲日誌文件設置適當的冗餘級別(0~9)。冗餘級別越高,輸出的信息越詳細。
# 0 表示靜默運行,只記錄致命錯誤。
# 4 表示合理的常規用法。
# 5 和 6 可以幫助調試連接錯誤。
# 9 表示極度冗餘,輸出非常詳細的日誌信息。
verb 3

還有許多詳細配置,可查看官網說明。

啓動openvpn服務

VMware虛擬機可能還需加載tun內核模塊並啓用轉發。

  • 加載tun內核模塊並啓用轉發。

    • 加載tun內核模塊以便於openvpn生成虛擬網卡:sudo modprobe tun
    • 檢查tun加載成功沒有lsmod | grep tun
    operation@opensuse-wordpress:/etc/openvpn> sudo modprobe tun
    [sudo] password for root: 
    operation@opensuse-wordpress:/etc/openvpn> lsmod | grep tun
    tun                    32768  0 
    ip6_udp_tunnel         16384  1 vxlan
    udp_tunnel             16384  1 vxlan
    
    
    • 檢驗轉發啓用了沒有,如果己轉發就不用做下一步的啓用。

      cat /proc/sys/net/ipv4/ip_forward

    • 啓用轉發sudo echo 1 > /proc/sys/net/ipv4/ip_forward

      或直接vim編輯/proc/sys/net/ipv4/ip_forward爲1。

  • 測試啓動服務

    sudo openvpn --config /etc/openvpn/server.conf

    注:這個命令是非後臺模式運行的,方便測試運行時我們直接查看到日誌輸出。

    operation@opensuse-wordpress:/etc/openvpn> sudo openvpn --config /etc/openvpn/server.conf
    [sudo] password for root: 
    Wed Sep 19 09:37:37 2018 OpenVPN 2.3.8 x86_64-suse-linux-gnu [SSL (OpenSSL)] [LZO] [EPOLL] [MH] [IPv6] built on Aug  4 2015
    Wed Sep 19 09:37:37 2018 library versions: OpenSSL 1.0.2j-fips  26 Sep 2016, LZO 2.08
    Wed Sep 19 09:37:37 2018 Diffie-Hellman initialized with 2048 bit key
    Wed Sep 19 09:37:37 2018 Socket Buffers: R=[212992->131072] S=[212992->131072]
    Wed Sep 19 09:37:37 2018 ROUTE_GATEWAY 172.18.47.253/255.255.240.0 IFACE=eth0 HWADDR=00:16:3e:06:52:01
    Wed Sep 19 09:37:37 2018 TUN/TAP device tun0 opened
    Wed Sep 19 09:37:37 2018 TUN/TAP TX queue length set to 100
    Wed Sep 19 09:37:37 2018 do_ifconfig, tt->ipv6=0, tt->did_ifconfig_ipv6_setup=0
    Wed Sep 19 09:37:37 2018 /bin/ip link set dev tun0 up mtu 1500
    Wed Sep 19 09:37:37 2018 /bin/ip addr add dev tun0 local 10.8.0.1 peer 10.8.0.2
    Wed Sep 19 09:37:37 2018 /bin/ip route add 10.8.0.0/24 via 10.8.0.2
    Wed Sep 19 09:37:37 2018 UDPv4 link local (bound): [undef]
    Wed Sep 19 09:37:37 2018 UDPv4 link remote: [undef]
    Wed Sep 19 09:37:37 2018 MULTI: multi_init called, r=256 v=256
    Wed Sep 19 09:37:37 2018 IFCONFIG POOL: base=10.8.0.4 size=62, ipv6=0
    Wed Sep 19 09:37:37 2018 IFCONFIG POOL LIST
    Wed Sep 19 09:37:37 2018 Initialization Sequence Completed
    
    
    • 後臺模式運行

      openvpn --daemon --config /etc/openvpn/server.conf加了--daemon則是運行在後臺模式。

    • 也可以以systemctl start openvpn 運行。

      畢竟是zypper安裝的,使用systemctl來啓動和停止openvpn也挺方便。

windows客戶端配置

  • 用sftp或lrzsz命令工具之類將在openvpn服務器生成的客戶端證書和key下載到客戶端電腦。

    ca.crt client-wwz.crt client-wwz.key //這三個文件,我是爲了方便起見一起放到了/etc/openvpn/client下。
    
  • 去官網下載openvpn windows端進行安裝,因爲都是圖形界面鼠標不斷點擊下一步來進行安裝的就不做詳述和截圖了。

    • 官網下載鏈接,需翻牆:https://openvpn.net/index.php/open-source/downloads.html

    • 我選擇了安裝到D:\Program Files目錄下,所以安裝完成後,爲方便起見,前面從服務端拷下來的三個證書相關文件可以放置到D:\Program Files\OpenVPN\ToOpenSUSE下了。當然,ToOpenSUSE目錄要自己新建。

  • 然後安裝目錄找到simple-config
    D:\Program Files\OpenVPN\sample-config\client.ovpn

    client.ovpn 複製到D:\Program Files\OpenVPN\ToOpenSUSE下,編輯client.ovpn配置文件:

  • 編輯配置文件:

    client         # 指定當前VPN是客戶端
    dev tun        # 必須與服務器端的保持一致
    proto udp      # 必須與服務器端的保持一致
    remote 172.16.1.128 1194   # 指定連接的遠程服務器的實際IP地址和端口號
    
    resolv-retry infinite    
    # 斷線自動重新連接,在網絡不穩定的情況下(例如:筆記本電腦無線網絡)非常有用。
    
    nobind         # 不綁定特定的本地端口號
    persist-key
    persist-tun
     
    # 默認證書路徑在安裝目錄的config下。
    # 證書目錄是在另外路徑下的,需要敲絕對路徑。
    ca D:\\"Program\ Files"\\OpenVPN\\ToOpenSUSE\\ca.crt
    cert D:\\"Program\ Files"\\OpenVPN\\ToOpenSUSE\\client-wwz.crt
    key D:\\"Program\ Files"\\OpenVPN\\ToOpenSUSE\\client-wwz.key
    
    ns-cert-type server      # 指定採用服務器校驗方式
    
    # tls-auth ta.key 1     
    # 如果服務器設置了防禦DoS等攻擊的ta.key,則必須每個客戶端開啓;如果未設置,則註釋掉這一行;
    
    comp-lzo # 要和服務器端的配置保持一致,之前我們的服務端是配置上了壓縮的,客戶端也得開啓
    verb 3
    

    簡單應用的話我們只需要以上項目每行一個,複雜些應用的話可以參照官方具體配置文檔。

    爲方便區分,我們將編輯好的client.ovpn文件重命名爲ToOpenSUSE.ovpn

    • 注:windows路徑在配置文件中想要正確識別的話,首先要在\前加多個\表示轉,而帶空格的文件夾名同樣空格前需帶個\用來轉義。
  • 打開windows openvpn客戶端:

    D:\Program Files\OpenVPN\bin\openvpn-gui(當然,安裝完成後桌面也會有它的快捷方式),右鍵彈出菜單,選擇導入配置文件:

    選中之前配置好的ToOpenSUSE.ovpn配置文件:D:\Program Files\OpenVPN\ToOpenSUSE\ToOpenSUSE.ovpn

注:這個配置文件其實是導入到`C:\Users\Administrator\OpenVPN\config\ToOpenSUSE`路徑下,所以以後要修改了配置的話,需要重新導入一次,或者直接到以上路徑下直接修改配置文件。
  • 連接openvpn服務端:

    由於只有一個配置文件,所以導入完成後,繼續右鍵菜單,點擊Connect,進行連接測試:

注意,做這一步的時候,先保證你的服務器防火牆,雲服務器的安全組等對你定義好的openvpn端口允許了udp連接。

![](https://www.tielemao.com/wp-content/uploads/2018/09/openvpn-gui-connect-password.png)

彈出輸入密碼框,注意,這裏就是輸入之前爲客戶端證書設置好的密碼了。可以勾選上保存密碼,就不用每次都要輸入密碼了。

![](https://www.tielemao.com/wp-content/uploads/2018/09/openvpn-gui-conn.png)

如上,連接成功。

測試openvpn連接

  • xshell測試

    如圖,可以看到通過10.8.0.1而不是公網ip的方式也能ssh連接成功了。

linux openvpn客戶端配置

linux端互連也是同樣的,在另一個linux上配置成client就是了。

以linux客戶端爲centos6.9爲例,yum安裝的openvpn。

安裝就不再重複講述了,直接到配置這一步驟:

  • 在客戶端openvpn主目錄/etc/openvpn下新建config目錄,
    同樣將服務端的ca.crtclient-wwz.crtclient-wwz.key放置進去。

複製一份客戶端配置範例進config目錄,這裏要注意的是,之前windows用的配置文件後綴名爲.ovpn,到了linux用的就是.conf了!

cp /usr/share/doc/openvpn-2.4.4/sample/sample-config-files/client.conf /etc/openvpn/config/client.conf
  • 編輯配置文件

    client         # 指定當前VPN是客戶端
    dev tun        # 必須與服務器端的保持一致
    proto udp      # 必須與服務器端的保持一致
    remote 172.16.1.128 1194   # 指定連接的遠程服務器的實際IP地址和端口號
    
    resolv-retry infinite    
    # 斷線自動重新連接,在網絡不穩定的情況下(例如:筆記本電腦無線網絡)非常有用。
    
    nobind         # 不綁定特定的本地端口號
    persist-key
    persist-tun
    
    ca /etc/openvpn/config/ca.crt                 # 指定CA證書的文件路徑
    cert /etc/openvpn/config/client-wwz.crt       # 指定當前客戶端的證書文件路徑
    key /etc/openvpn/config/client-wwz.key        # 指定當前客戶端的私鑰文件路徑
    
    ns-cert-type server      # 指定採用服務器校驗方式
    
    # tls-auth ta.key 1     
    # 如果服務器設置了防禦DoS等攻擊的ta.key,則必須每個客戶端開啓;如果未設置,則註釋掉這一行;
    
    comp-lzo              #與服務器保持一致
    verb 3                #指定日誌文件的記錄詳細級別,可選0-9,等級越高日誌內容越詳細
    
  • 注意:

    • 配置文件中的文件路徑涉及到相對路徑的,均以啓動OpenVPN時的所在目錄爲準。
      由於在配置文件中設置的文件路徑都是相對config目錄的路徑,因此也只能在config目錄下才能正常啓動OpenVPN。如果想在任何地方都能使用上述命令啓動OpenVPN,建議將配置文件與文件路徑相關的部分全部改爲絕對路徑。
    • OpenVPN服務器所在計算機必須允許OpenVPN通過防火牆,你可以禁用掉防火牆,或者將OpenVPN設爲可信程序,或者開放1194端口。
      -A INPUT -p udp --dport 1194 -j ACCEPT
    • 啓動服務器和客戶端都需要一定的權限,建議測試學習時用root賬戶或sudo命令進行啓動。
  • 運行openvpn客戶端:

    openvpn --daemon --cd 配置文件路徑 --config client.ovpn(配置文件名稱) --log-append /var/log/openvpn/openvpn.log(日誌路徑)
    

查看日誌成功連接沒有:
tail -f /var/log/openvpn/openvpn.log
到此已經成功了。

  • 設置開機自動連接
    vim /etc/rc.local
openvpn --daemon --cd 配置文件路徑 --config client.ovpn(配置文件名稱) --log-append /var/log/openvpn.log(日誌路徑)
  • 加入到/etc/rc.local配置文件裏。

openvpn的搭建和簡單使用本次就介紹到這裏。

【end】

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章