1. 程式人生 > >Linux基本服務——多種VPN(GRE、PPTP、L2TP+IPSec)

Linux基本服務——多種VPN(GRE、PPTP、L2TP+IPSec)

VPN    網路隧道

    搭建VPN:VPN有很多個版本GRE(Linux專用),PPTP(相容Windows和Linux),L2TP+IPSec(安全的加密)等

GRE--VPN 

(要搭建VPN的兩個裝置都要進行,不過注意配置的時候裡面的IP要分清楚自己的和對方的)
      1. 啟用模組 
       modprobe ip_gre
         檢視是否載入了 lsmod  | grep ip_gre

     2. 建立VPN
       ip tunnel add tun0  mode gre remote 目標IP local 本機IP    # 新建一個VPN網絡卡
       ip link show | grep tun0            # 檢視隧道資訊
       ip link set tun0 up                # 啟動隧道

     3. 賦予VPN中的IP
       ip addr add 本機設定的VPN內部IP/閘道器 peer 另一個機器的VPN內部IP/閘道器 dev tun0
         檢視IP :  ip a s


PPTP--VPN
      1. 裝包:pptpd-1.4.0-2.el7.x86_64.rpm,這個不在預設光碟,可以到資源中下載,也可以去官網下載

      2. 配置:修改配置檔案
        主配置檔案: /etc/pptpd.conf 在末尾有模板,將其修改為:

localip 本機的IP
remoteip 配置VPN中的IP範圍  格式:IP1-IP2連續的IP  IP3,IP4不連續的IP

        設定配置檔案:/etc/ppp/options.pptpd 也是有模板的,搜尋ms-dns就可以了,去掉註釋進行修改

ms-dns 具體DNS伺服器的IP
# 其中有一行 name 後面是pptp的伺服器名,不需要改,只要知道即可

         密碼配置檔案:/etc/ppp/chap-secrets

# client  server        secret  IP addresses
   使用者名稱    伺服器標記(*)    密碼      客戶端(*)

         路由配置檔案:/proc/sys/net/ipv4/ip_forward 開啟Linux的路由轉發功能,1是開,0是關45

命令:echo "1" > /proc/sys/net/ipv4/ip_forward 

L2TP+IPSec--VPN

   搭建IPSec加密軟體

      1. 裝包:yum install -y libreswan

      2. 修改配置檔案:

   主配置檔案 /etc/ipsec.conf
         最後有一個句話:include /etc/ipsec.d/*.conf
         這就和httpd的配置檔案一樣,在/etc/ipsec.d/檔名.conf都可以作為配置檔案
         所以只要建立一個檔案,然後就可以操作了

conn IDC-PSK-NAT
    rightsubnet=vhost:%priv
    also=IDC-PSK-noNAT

# 加密演算法
conn IDC-PSK-noNAT
    authby=secret
        ike=3des-sha1;modp1024
        phase2alg=aes256-sha1;modp2048
    pfs=no
    auto=add
    keyingtries=3
    rekey=no
    ikelifetime=8h
    keylife=3h
    type=transport

    left=伺服器VPN的真實IP
    leftprotoport=17/1701
    right=%any
    rightprotoport=17/%any

   預共享金鑰 PSK 的配置檔案:/etc/ipsec.secrets
         和主配置檔案一樣,在 /etc/ipsec.d/檔名.secrets都可以作為其配置檔案

VPN伺服器的真實IP   %any:    PSK    "psk金鑰資訊" 

      3. 啟服務:systemctl restart ipsec
         檢視服務: netstat -ntlup | grep pluto

   注意:這軟體,軟體包名是libreswan,配置檔案和啟動服務是ipsec,檢視服務的是pluto

   搭建XL2TP服務
      1. 裝包:yum install xl2tpd-1.3.8-2.el7.x86_64.rpm

      2. 配置:修改配置檔案
   主配置檔案: /etc/xl2tpd/xl2tpd.conf 

…………
ip range = 分配給客戶端的IP範圍 
local ip = VPN伺服器的IP地址

   認證配置檔案: /etc/ppp/options.xl2tpd

修改配置檔案:
刪除或者註釋    crtscts
刪除或者註釋    lock
開啟     require-mschap-v2

或者用命令:

sed -i '/\(crtscts\)\|\(lock\)/s/^/#/' /etc/ppp/options.xl2tpd
sed -i '/require-ms/s/#//' /etc/ppp/options.xl2tpd

   修改密碼檔案: /etc/ppp/chap-secrets ,和上文的PPTP配置一樣

使用者名稱    伺服器標記(*)    密碼      客戶端(*)

      3. 啟動服務
        systemctl start xl2tpd

        檢視服務是否啟動netstat  -ntulp |grep xl2tpd 

  附註:

    如想作VPN轉發,搭建完VPN後需要開啟路由功能,配置好NAT才能實現與外界通訊

  路由配置檔案:/proc/sys/net/ipv4/ip_forward 開啟Linux的路由轉發功能,1是開,0是關45
命令:echo "1" > /proc/sys/net/ipv4/ip_forward 

   配置路由功能的 NAT, 將私有IP轉為公網IP
命令: iptables -t nat -A POSTROUTING -s 隧道內的私有IP(也可以是 網段/子網掩碼) -j SNAT --to-source 公有IP


NTP 

   Network Time Protocol(網路時間協議)
    採用的是分層設計,每個裝置可以連線其他伺服器同步時間,同步後自己也可以成為伺服器,為其他裝置同步時間,這就是分層設計,不需要每次都和一個伺服器進行同步,實現分壓,不過Stratum層的總數限制在15以內。
    舉例說就是,國家一個NTP伺服器,一個裝置a連結它,進行時間同步後,他和裝置b、裝置c連結後,裝置b和c就會把a當作NTP伺服器同步時間,這就形成了3層結構,以此類推可以理解多層的含義了。
    當然NTP如果要作為一個伺服器,配置中需要修改,開啟服務功能

  搭建NTP服務
    1. 裝包:  yum -y install chrony

    2. 修改配置檔案: /etc/chrony.conf

server 伺服器的IP iburst
allow IP 或者是 網段/子網掩碼
deny IP 或者是 網段/子網掩碼
local stratum 層數(必須大於上一層伺服器的層數,小於15)

    3. 啟動服務
     systemctl  restart  chronyd
     systemctl  enable  chronyd

    注意:時間同步的一個問題 !閏秒(某分鐘59秒後一秒是60秒再之後才調轉00,諸多軟體不識別 某分60秒)! 在出現閏秒出現前關閉連線外網的NTP伺服器。


pssh
   遠端套件工具,同時對多個程式進行遠端控制與操作

    1. 裝包 :rpm -ivh  pssh-2.3.1-5.el7.noarch.rpm  (這個包不在光碟中)

    2. 命令  pssh  選項 ( 這些選項在下面所有命令中都能用 )

-A 使用密碼遠端其他主機(不寫預設使用金鑰),一會互動式輸入密碼即可
-i 將輸出顯示在螢幕
-H '主機名或者IP' 設定需要連線的主機
-h '記錄了主機名或者IP的檔案' 設定主機列表檔案
-p 設定併發數量
-t 設定超時時間
-o 目錄 設定標準輸出資訊儲存的目錄,然後目錄下會出現 -H 後的資料,或者 -h 讀取的檔案中的資料同名的檔案
-e 目錄 設定錯誤輸出資訊儲存的目錄,如果目錄下有同名檔案會覆蓋
-x ssh後要新增的引數 傳遞引數給ssh( -o StrictHostKeyChecking=no 的意思就是第一次連線的時候不需要輸入yes)

  第一次用的時候: pssh -A -H 'IP' -x '-o StrictHostKeyChecking=no' 命令
    之後使用就不需要 -x '-o StrictHostKeyChecking=no'了
  如果沒有-i,命令返回的資訊不會出現在螢幕上,但是,pssh會根據命令執行成功與否反映出來SUCCESS或FAILURE。
 
  可以在一個檔案和中寫好IP資訊,檔案中每列格式是(可以不寫使用者,預設以當前使用命令的使用者的身份): [[email protected]]IP ,然後用 -h 檔名 即可,就不需要反覆寫IP了

  附: 非互動的建立金鑰 ssh-keygen -N '' -f /root/.ssh/id_rsa
      這樣就可以在指令碼中建立金鑰,不過沒必要重複建立,所以可以判斷一下金鑰是否存在

[ ! -f /root/.ssh/id_rsa ] && ssh-keygen -N '' -f /root/.ssh/id_rsa 

      建立金鑰後,傳遞金鑰到指定IP即可  ssh-copy-id  IP
      有金鑰後,就不需要使用 -A 來輸入密碼了。

   3. 批量拷貝命令 pscp.pssh
     拷貝檔案:pscp.pssh -A -H 'IP'  本地檔案1 本地檔案2 …… 本地檔案n  目標主機儲存的位置(不需要IP,直接寫絕對路徑)
                 把多個檔案進行批量拷貝,最後一個路徑就當作目標主機儲存的位置  
     拷貝目錄:pscp.pssh -A  -r -H 'IP'  本地目錄1 本地目錄2 …… 本地目錄n  目標主機儲存的位置
         和拷貝檔案差不多,只需要一個選項-r即可

   4. 批量收集 pslurp
      pslurp  -A -H 'IP' [ -L 指定下載到的位置 ]  目標主機的檔案位置  /下載後文件的命名
        先在指定位置下按照IP建立同名的目錄,再把目標主機中的某個檔案全部下載到本地指定位置下指定IP的目錄,並命名成指定名字
        如果沒有 -L 位置預設為 當前目錄
        加上 -r 就可以收集目錄

   5.  批量殺死 pnuke
       pnuke -A -H 'IP'  關鍵字
       其實就是遠端到另外裝置上用pkill進行查殺