1. 程式人生 > >使用openvpn連通多個機房內網

使用openvpn連通多個機房內網

一.環境簡述

之前一直使用公網ip來連線各個機房的伺服器,現在ip不太夠用了,而且有些機器也不需要用到公網ip.通過openvpn將多個機房連線起來,組成一個區域網,機器ip可以做到唯一性,便於標識.既節省了ip.又方便管理.

本例環境如下,伺服器使用的系統為centos 7.1
這裡寫圖片描述

北京機房內網網段 172.16.2.0/24,伺服器公網ip 20.20.20.20,內網閘道器172.16.2.1
廣州機房內網網段 172.16.1.0/24,伺服器公網ip 10.10.10.10,內網閘道器172.16.1.1
公司內網網段 172.16.3.0/24,防火牆公網ip 30.30.30.30,內網閘道器172.16.3.1,內網伺服器ip 172.16.3.88

實現思路:
1.在廣州機房搭建一個openvpn服務端,北京和公司內網各選一臺伺服器做openvpn的客戶端連線廣州.
2.openvpn使用橋接模式,開啟client-to-client.北京和公司都連上後,這3臺機器預設就能互訪.
3.各內網網段的互通使用靜態路由.

二.廣州安裝openvpn服務端

安裝前需注意伺服器的系統時間要一致,可按如下方法同步:

/usr/sbin/ntpdate cn.pool.ntp.org

1.安裝openvpn

如果沒epel源,先新增下

wget  http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
rpm -Uvh epel-release-7-5.noarch.rpm yum -y install openvpn easy-rsa

2.建立證書

cp -r /usr/share/easy-rsa/ /etc/openvpn/
cd /etc/openvpn/easy-rsa/2.*/
vim vars

設定如下內容

export KEY_COUNTRY="CN"
export KEY_PROVINCE="GD"
export KEY_CITY="guangzhou"
export KEY_ORG="test"
export KEY_EMAIL="[email protected]
"
export KEY_OU="MyOrganizationalUnit" # X509 Subject Field export KEY_NAME="EasyRSA"

產生證書

source ./vars
./clean-all
./build-ca

./build-key-server server
./build-dh
./build-key client

cd /etc/openvpn/easy-rsa/2.0/
cp -r keys/ /etc/openvpn/

3.配置openvpn

vim /etc/openvpn/server.conf

關鍵配置如下:

port 1194
proto udp
dev tap0
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/server.crt
key /etc/openvpn/keys/server.key
dh /etc/openvpn/keys/dh2048.pem
ifconfig-pool-persist ipp.txt
server-bridge 172.16.1.1 255.255.255.0 172.16.1.2 172.16.1.10
client-config-dir ccd
client-to-client
duplicate-cn
keepalive 10 120
comp-lzo
user nobody
group nobody
persist-key
persist-tun
status openvpn-status.log
verb 4
mute 20
script-security 3 
#驗證使用者名稱密碼指令碼
auth-user-pass-verify /etc/openvpn/checkpsw.sh via-env 
#開啟使用者名稱和密碼驗證,用於服務端分配固定ip
username-as-common-name
client-config-dir /etc/openvpn/ccd #用於服務端分配固定ip

設定使用者名稱和密碼,並設定固定分配ip

cd /etc/openvpn
vim psw-file
#這裡設定用於連線openvpn的使用者名稱和密碼,格式為使用者名稱 + 空格 +密碼,例如
bj test123456
com test123456

#在該目錄下再新建一個ccd資料夾
mkdir ccd
cd ccd

#在該目錄下新建兩個檔案,把使用者名稱作為檔名的命名

vi bj
#新增如下內容
ifconfig-push 172.16.1.2 255.255.255.0

vi com
#新增如下內容
ifconfig-push 172.16.1.3 255.255.255.0

4.新增密碼驗證指令碼

vi /etc/openvpn/checkpsw.sh

內容如下

#!/bin/sh
###########################################################
# checkpsw.sh (C) 2004 Mathias Sundman <[email protected]>
#
# This script will authenticate OpenVPN users against
# a plain text file. The passfile should simply contain
# one row per user with the username first followed by
# one or more space(s) or tab(s) and then the password.

PASSFILE="/etc/openvpn/psw-file"
LOG_FILE="/var/log/openvpn-password.log"
TIME_STAMP=`date "+%Y-%m-%d %T"`

###########################################################

if [ ! -r "${PASSFILE}" ]; then
  echo "${TIME_STAMP}: Could not open password file \"${PASSFILE}\" for reading." >> ${LOG_FILE}
  exit 1
fi

CORRECT_PASSWORD=`awk '!/^;/&&!/^#/&&$1=="'${username}'"{print $2;exit}' ${PASSFILE}`

if [ "${CORRECT_PASSWORD}" = "" ]; then 
  echo "${TIME_STAMP}: User does not exist: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}
  exit 1
fi

if [ "${password}" = "${CORRECT_PASSWORD}" ]; then 
  echo "${TIME_STAMP}: Successful authentication: username=\"${username}\"." >> ${LOG_FILE}
  exit 0
fi

echo "${TIME_STAMP}: Incorrect password: username=\"${username}\", password=\"${password}\"." >> ${LOG_FILE}
exit 1

5.IP配置

給openVPN服務端的網絡卡配置ip時,有兩種方式選擇:橋接或者在配置檔案中設定,這裡兩種都示例下,選擇任意一個即可,推薦用配置檔案分配(簡單些~)。

5.1 在配置檔案中指定

vim /etc/openvpn/server.conf

在ifconfig-pool-persist ipp.txt下新增一行

ifconfig 172.16.1.1 255.255.255.0

5.2 通過橋接分配

5.2.1 啟動橋接指令碼

#!/bin/bash
#################################
# Set up Ethernet bridge on Linux
# Requires: bridge-utils
#################################
# Define Bridge Interface
br="br0"
# Define list of TAP interfaces to be bridged,
# for example tap="tap0 tap1 tap2".
tap="tap0"
# Define physical ethernet interface to be bridged
# with TAP interface(s) above.
eth="ens9" #這裡注意下網絡卡名
eth_ip="172.16.1.1"
eth_netmask="255.255.255.0"
eth_broadcast="172.16.1.255"
for t in $tap; do
   /usr/sbin/openvpn --mktun --dev $t
done
brctl addbr $br
brctl addif $br $eth
for t in $tap; do
    brctl addif $br $t
done
for t in $tap; do
    ifconfig $t 0.0.0.0 promisc up
done
ifconfig $eth 0.0.0.0 promisc up
ifconfig $br $eth_ip netmask $eth_netmask broadcast $eth_broadcast
route add -net 172.16.2.0/24 gw 172.16.1.2
route add -net 172.16.3.0/24 gw 172.16.1.3

5.2.2 停止橋接指令碼

#!/bin/bash
####################################
# Tear Down Ethernet bridge on Linux
####################################
# Define Bridge Interface
br="br0"
# Define list of TAP interfaces to be bridged together
tap="tap0"
ifconfig $br down
brctl delbr $br
for t in $tap; do
    /usr/sbin/openvpn --rmtun --dev $t
done

6.設定iptables

nat鏈新增如下規則
-A POSTROUTING -s 10.8.0.0/24 -o eth1 -j MASQUERADE
-A POSTROUTING -s 172.16.0.0/16 -j MASQUERADE

filter鏈新增如下規則
-A INPUT -s 20.20.20.0/24  -j ACCEPT
-A INPUT -s0.0.0.0/24  -j ACCEPT
-A INPUT -s 172.16.0.0/16 -j ACCEPT
-A FORWARD -j ACCEPT

7.啟動openvpn

echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf
sysctl -p
systemctl -f enable openvpn@server.service
systemctl start openvpn@server

三.北京,公司內網連線廣州openvpn,打通內網

以北京20.20.20.20伺服器為例
1.安裝openvpn,步驟同上
2.將openvpn服務端(10.10.10.10)的三個證書檔案ca.crt client.crt client.key(路徑/etc/openvpn/keys)拷貝到/etc/openvpn/下
3.新增openvpn啟動指令碼

cd /etc/openvpn

vi client.sh
#新增如下內容
#!/bin/sh
case "$1" in
start)
    /usr/sbin/openvpn /etc/openvpn/client.ovpn > /dev/null &
    sleep 5
    route add -net 172.16.3.0/24 gw 172.16.1.3
;;
stop)
    pkill openvpn
;;
restart)
    pkill openvpn
    sleep 2
    /usr/sbin/openvpn /etc/openvpn/client.ovpn > /dev/null &
;;
esac

vi psw.conf
#新增如下內容
bj
test123456

vi client.ovpn
#新增如下內容
client
dev tap
proto udp
remote 10.10.10.10 1194
resolv-retry infinite
nobind
persist-key
persist-tun
mute-replay-warnings
ca ca.crt
cert client.crt
key client.key
ns-cert-type server
comp-lzo
auth-user-pass psw.conf

新增執行許可權
chmod +x client.sh

#加入系統啟動項
echo '(cd /etc/openvpn; ./client.sh start)' >> /etc/rc.local

4.設定iptables

nat鏈新增如下規則
-A POSTROUTING -d 172.16.0.0/16 -o tap0 -j MASQUERADE

filter鏈新增如下規則
-A FORWARD -i eth0 -o tap0 -j ACCEPT
-A FORWARD -i tap0 -o eth0 -j ACCEPT

5.設定完成後,重啟下防火牆,啟動openvpn

systemctl restart iptables
(cd /etc/openvpn; ./client.sh start)

ping下廣州內網閘道器172.16.1.1,如果ping通說明北京與廣州可以互通了.
#ping 172.16.1.1 -c 4
PING 172.16.1.1 (172.16.1.1) 56(84) bytes of data.
64 bytes from 172.16.1.1: icmp_seq=1 ttl=64 time=37.1 ms
64 bytes from 172.16.1.1: icmp_seq=2 ttl=64 time=37.0 ms
64 bytes from 172.16.1.1: icmp_seq=3 ttl=64 time=37.2 ms
64 bytes from 172.16.1.1: icmp_seq=4 ttl=64 time=37.0 ms

--- 172.16.1.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3040ms
rtt min/avg/max/mdev = 37.053/37.133/37.268/0.083 ms

6.公司內網openvpn連線設定與北京一樣,注意使用者名稱密碼及路由的不同:

公司內網的openvpn的啟動指令碼如下:
vi client.sh
#新增如下內容
#!/bin/sh
case "$1" in
start)
    /usr/sbin/openvpn /etc/openvpn/client.ovpn > /dev/null &
    sleep 5
    route add -net 172.16.2.0/24 gw 172.16.1.2
;;
stop)
    pkill openvpn
;;
restart)
    pkill openvpn
    sleep 2
    /usr/sbin/openvpn /etc/openvpn/client.ovpn > /dev/null &
;;
esac

7.北京,公司內網的openvpn都連線上後,在廣州openvpn的伺服器上新增如下路由

route add -net 172.16.2.0/24 gw 172.16.1.2
route add -net 172.16.3.0/24 gw 172.16.1.3

8.以上步驟成功完成後,北京內網,廣州內網,公司內網即可互相訪問.在任意的一臺伺服器上都可以訪問其他節點的伺服器,實現了內網互通的需求.

相關推薦

使用openvpn連通機房

一.環境簡述 之前一直使用公網ip來連線各個機房的伺服器,現在ip不太夠用了,而且有些機器也不需要用到公網ip.通過openvpn將多個機房連線起來,組成一個區域網,機器ip可以做到唯一性,便於標識.既節省了ip.又方便管理. 本例環境如下,伺服器使用的系統

如何檢測一個圓在

https data- 兩個 .com origin 所有 結果 定義 thum 問題定義: 存在多個半徑相同的圓,和一個半徑不同的圓,如何判斷半徑不同的圓完全在一群圓內。下圖演示了幾種情況,左邊是完全在圓內,右邊不是。 解決方法之一: 對於紅圓在某個黑圓之內或者

機房ARP攻擊的處理

arp攻擊防禦 偽造網關 anti-attack ddos886.com 機房內網ARP攻擊的處理方法1:在核心查找進核心S9306sysdis arp anti-attack gateway item #得到ARP攻擊的MAC地址進機櫃交換機查攻擊服務器的端口Sysdisplay m

機房電腦時間自動同步器

  ★ 機房內網時間自動同步器 (區域網版+個人版) 最新版本: v1.33更新日期: 2017.9.8★ 編寫原因:應同事要求編寫,把內網中各有盤工作站的時間自動同步到某臺電腦的時間(上海行情接收機), 或同步到網上原子鐘的時間,省去經常手動校正電腦時間的麻煩。★ 軟體介紹:本軟體可用於把個人

frp客戶端,實現一臺雲伺服器連線區域網的主機,埠轉發

很簡單,用不同的frps.ini就行 假設你原來已經啟動了一個frps.ini,現在想再加一個。 那就新建一個frps1.ini,然後埠和之前的不一樣就行。 假設之前有一個7000的埠了,那現在這個用7001就可以啦~ cp frps.ini frps1.ini 如

阿里雲北京機房故障,引發大面積服務異常

6日,藍鯨TMT獨家獲悉,阿里雲北京機房內網發生故障,導致大量網際網路公司業務受到影響。 一位受到影響的網際網路公司技術總監在接受藍鯨TMT連線時稱,目前已經確認了是阿里雲方面的故障,阿里雲工作人員表示,10點20分阿里雲北京區開始出現故障,接近11點20分恢復正常。 需要特別指出的是,這並不是阿

NAT穿透(兩不同主機通訊)

在網路編碼中會發現程式在區域網中是可以適用的,但是在外網與內網之間和內網與內網之間就不可行。  問題就在於NAT。首先介紹下NAT。 NAT的作用NAT(Network Address Translator),網路地址轉換。顧名思義,它是一種把內部私有網路IP地址翻譯成公有網路IP地址的技術,如圖5-1所示。

python刪除檔案的指定內容

import os datapath = r'F:\mine\data' #待處理的檔案存放目錄 files = os.listdir(datapath) for file in files: with open(r'F:\mine\data'+"\\"+f

openVPN連線內部網路

環境:win7  1、openvpn配置多個網路     OpenVPN\config下

elasticsearch限制訪問 限制ip訪問

修改conf資料夾下的elastic search.yml network.host: 10.181.28.41 10.181.30.11 10.181.30.15 10.181.30.21 10.181.30.51 注意空格 歡迎訪問我的技術群425783133

使用frp工具快速搭建穿透以及配置ssh和web服務

frp簡介 FRP 專案地址 https://github.com/fatedier/frp/blob/master/README_zh.md frp 是一個可用於內網穿透的高效能的反向代理應用,支援 tcp, udp 協議,為 http 和 https 應用協議提供了額外的能力,且嘗試性支

lvs 一個卡單個管理ip,段VIP解決辦法

lvs keepalived 說明:lvs的vip和realserver的rip是可以跨網段的ifconfig輸出如下:[[email protected]/* */ scripts]# ifconfig eth0 Link encap:Ethernet HWaddr 00:

淺談兩種方法實現瀏覽器標簽頁之間的通信

tools view -s data- oca microsoft oar art set 調用localstorge、cookies等本地存儲方式。 方法一: localstorge在一個標簽頁裏被添加、修改或刪除時,都會觸發一個storage事件,通過在另一個標簽頁裏監

隊列組用於絡請求

結束 serial light notify nss creat blog resp 所有    dispatch_group_t group = dispatch_group_create(); dispatch_queue_t serialQueue = di

絡請求成功返回再執行另外任務的思路分析(iOS)

cnblogs 運行 == set 聯系 demo use 但是 clas 前言 今天我們來討論一個經常出現的需求場景,也是一個老話題。在開發中我們往往會遇到需要進行多個網絡請求,並且需要多個網絡請求成功返回後再做其他事的場景。比如同一個界面顯示的內容需要用到兩個網絡接口

oc56--ARC對象的存管理

沒有 Owner 管理 bject -a const nbsp int argc // main.m // ARC中多個對象的內存管理:ARC的內存管理就是MRC的內存管理(一個對象釋放的時候,必然會把它裏面的對象釋放),只不過一個是Xcode加的代碼,一個是我們自己

卡綁定ip, 卡綁定成一塊虛擬

0ms 模塊 通過 ip地址 ifcfg-eth script img 毫秒 外部 Linux網卡配置與綁定 Redhat Linux的網絡配置,基本上是通過修改幾個配置文件來實現的,雖然也可以用ifconfig來設置IP,用route來配置默認網關,用hostna

openvpn連接後與服務端服務器連接

pen vpn服務器 bsp sna vpn post 三種 獲取 eth1 客戶端連接vpn服務端後會獲取一個10.8.0.x的地址,而openvpn服務器上面有一個10.8.0.1的地址,此時客戶端就能連接服務端了。如果配置文件內沒有配置“push "route xx.

(譯)存沈思:名稱相關的神秘的SQL Server存消耗者。

-c 開發人員 com 博文 hash join sum -s 並發執行 申請 原文:(譯)內存沈思:多個名稱相關的神秘的SQL Server內存消耗者。 原文出處:https://blogs.msdn.microsoft.com/sqlmeditation/2013/

找出一定範圍連續整數,使其立方之和恰好等於另一個整數的立方

es2017 nbsp 現實 png 提高 定位 http ati class 題目如圖,關於這道題的第一問比較簡單,只需驗證式子兩邊是否相等即可。這裏主要做一下第二問。 此題要求找出多個連續整數的立方和使其恰好等於另一個整數的立方,因為並沒有明確給出相應的條件,比