企業為了滿足出差人員,在家人員的辦公需要,往往需要開通遠程辦公功能。使得員工可以通過互聯網連接到公司內網進行工作。在WFilter NGF中,“OpenVPN服務端“和“PPTP服務端”這兩個模塊都可以滿足遠程辦公的需要。相對而言,OpenVPN的配置復雜,但是安全性更高一些。
本例中,我將演示如何用WFilter NGF的OpenVPN服務端模塊來實現遠程辦公。
1. 啟用OpenVPN服務
在”VPN->OpenVPN服務端”中啟用,設置通訊端口,認證模式,推送路由等。如下圖:
2. 創建可以遠程撥入的用戶
到“用戶認證”->“賬號管理”中創建有VPN撥入權限的用戶,設置密碼和有效期。
3. 配置windows客戶端
windows客戶端的配置主要包括如下步驟:
a. 安裝openvpn客戶端
b. 在“openvpn服務端”的菜單中下載ca證書,并且保持到config文件夾下。
c. 編輯配置文件
配置文件的格式:
創建好配置文件后,運行openvpn gui,然后點擊連接,即可連接到遠程網絡進行辦公啦。
4. 防火墻策略配置
OpenVPN遠程撥入的訪問權限,是受到防火墻策略控制的。如果要允許VPN用戶訪問內網,還需要在“防火墻配置”中添加允許訪問的策略。如下圖:
OpenVPN是一個用于創建虛擬專用網絡加密通道的免費開源軟件。使用OpenVPN可以方便地在家庭、辦公場所、住宿酒店等不同網絡訪問場所之間搭建類似于局域網的專用網絡通道。
我這里搭建主要為了在家也能連到公司進行辦公。
網關和VPN服務器不是同一個設備
服務器環境:干凈的CentOS6.5 64位系統
內網IP:192.168.1.250
外網IP:111.111.111.111(公司的固定外網IP)
OpenVPN版本:OpenVPN 2.3.11-1.el6
# 關閉selinux
setenforce 0 sed -i '/^SELINUX=/c\SELINUX=disabled' /etc/selinux/config
# 安裝openssl和lzo,lzo用于壓縮通訊數據加快傳輸速度
yum -y install openssl openssl-devel yum -y install lzo
# 安裝epel源
rpm -ivh http://mirrors.sohu.com/fedora-epel/6/x86_64/epel-release-6-8.noarch.rpm
# 安裝openvpn和easy-rsa
yum -y install openvpn easy-rsa
# 修改vars文件
cd /usr/share/easy-rsa/2.0/ vim vars
# 修改注冊信息,比如公司地址、公司名稱、部門名稱等。
export KEY_COUNTRY="CN" export KEY_PROVINCE="GD" export KEY_CITY="SZ" export KEY_ORG="XLCWNET" export KEY_EMAIL="chengzhi@xlcwnet.com" export KEY_OU="guest" export KEY_NAME="XLCWNET"
# 初始化環境變量
source vars
# 清除keys目錄下所有與證書相關的文件
# 下面步驟生成的證書和密鑰都在/usr/share/easy-rsa/2.0/keys目錄里 ##這個是在第一次執行,后面不需要再執行了
./clean-all
# 生成根證書ca.crt和根密鑰ca.key(一路按回車即可)
./build-ca
# 為服務端生成證書和密鑰(一路按回車,直到提示需要輸入y/n時,輸入y再按回車,一共兩次)
./build-key-server server
# 每一個登陸的VPN客戶端需要有一個證書,每個證書在同一時刻只能供一個客戶端連接,下面建立2份
# 為客戶端生成證書和密鑰(一路按回車,直到提示需要輸入y/n時,輸入y再按回車,一共兩次)
./build-key client1 ./build-key client2
# 創建密鑰,會生成dh2048.pem文件(生成過程比較慢,在此期間不要去中斷它)
./build-dh
# 生成ta.key文件(防DDos攻擊、UDP淹沒等惡意攻擊)
openvpn --genkey --secret keys/ta.key
文件生成后都在查看/usr/share/easy-rsa/2.0/keys目錄下
# 在openvpn的配置目錄下新建一個keys目錄
mkdir /etc/openvpn/keys
# 將需要用到的openvpn證書和密鑰復制一份到剛創建好的keys目錄中
cp /usr/share/easy-rsa/2.0/keys/{ca.crt,server.{crt,key},dh2048.pem,ta.key} /etc/openvpn/keys/
# 復制一份服務器端配置文件模板server.conf到/etc/openvpn/
cp /usr/share/doc/openvpn-2.3.2/sample/sample-config-files/server.conf /etc/openvpn/
# 編輯server.conf
vim /etc/openvpn/server.conf port 1194 # 改成tcp,默認使用udp,如果使用HTTP Proxy,必須使用tcp協議 proto tcp dev tun # 路徑前面加keys,全路徑為/etc/openvpn/keys/ca.crt ca keys/ca.crt cert keys/server.crt key keys/server.key # This file should be kept secret dh keys/dh2048.pem # 默認虛擬局域網網段,不要和實際的局域網沖突即可 server 172.16.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt # 172.16.0.0/24是我這臺VPN服務器所在的內網的網段,讀者應該根據自身實際情況進行修改 push "redirect-gateway def1 bypass-dhcp" # 設置客戶端調用服務器端的路由(比較重要,因為我的VPN服務器不是網關,沒有這句可能會出現連上VPN后無法訪問內網的情況) push "dhcp-option DNS 114.114.114.114" # 設置客戶端調用的DNS(比較重要,如果連上VPN的客戶端需要連接外網的話,就需要這個域名解析) push "route 192.168.0.0 255.255.0.0" # 可以讓客戶端之間相互訪問直接通過openvpn程序轉發,根據需要設置 # 實踐證明這個不需要也是可以的 #偶爾看到這句話,原來是提高效率的,暫時看出來效果 #如果可以讓VPN Client之間相互訪問直接通過openvpn程序轉發, #不用發送到tun或者tap設備后重新轉發,優化Client to Client的訪問效率 client-to-client # 如果客戶端都使用相同的證書和密鑰連接VPN,一定要打開這個選項,否則每個證書只允許一個人連接VPN duplicate-cn keepalive 10 120 tls-auth keys/ta.key 0 # This file is secret comp-lzo persist-key persist-tun # OpenVPN的狀態日志,默認為/etc/openvpn/openvpn-status.log status openvpn-status.log # OpenVPN的運行日志,默認為/etc/openvpn/openvpn.log log-append openvpn.log # 改成verb 5可以多查看一些調試信息 verb 3
# 開啟路由轉發功能
sed -i '/net.ipv4.ip_forward/s/0/1/' /etc/sysctl.conf sysctl -p
# 配置防火墻,別忘記保存
iptables -I INPUT -p tcp --dport 1194 -m comment --comment "openvpn" -j ACCEPT iptables -t nat -A POSTROUTING -s 172.16.0.0/24 -d 192.168.0.0/16 -o eth1 -j SNAT --to-source 192.168.1.250
##設置172.17.0.0/24網段訪問192.168.0.0/16網段走eth1的192.168.1.250
iptables -t nat -A POSTROUTING -s 172.16.0.0/24 ! -d 192.168.0.0/16 -o eth0 -j SNAT --to-source 111.111.111.111
##設置172.17.0.0/24網段訪問除了192.168.0.0/16網段以外網段走eth0的111.111.111.111
iptables -A FORWARD -d 172.16.0.0/24 -j ACCEPT iptables -A FORWARD -s 172.16.0.0/24 -j ACCEPT
##(一定需要,如果想客戶端訪問公司內網其他機器的話)
service iptables save
# 啟動openvpn并設置為開機啟動
service openvpn start chkconfig openvpn on
# 復制一份client.conf模板命名為client.ovpn
cp /usr/share/doc/openvpn-2.3.2/sample/sample-config-files/client.conf client.ovpn
# 編輯client.ovpn
vim client.ovpn client dev tun # 改為tcp proto tcp # OpenVPN服務器的外網IP和端口 remote 111.111.111.111 1194 resolv-retry infinite nobind persist-key persist-tun ca ca.crt # client1的證書 cert client1.crt # client1的密鑰 key client1.key remote-cert-tls server ###ns-cert-type server (看到網上很多這個選項,不知道干嘛的,默認沒有,嘗試沒有加發現也沒問題) # 去掉前面的注釋 tls-auth ta.key 1 comp-lzo verb 3
客戶端系統:Windows7 64位
內網IP:172.16.4.4
OpenVPN版本:OpenVPN 2.3.3 Windows 64位
1、下載安裝OpenVPN
OpenVPN 2.3.3 Windows 32位 安裝文件:
http://swupdate.openvpn.org/community/releases/openvpn-install-2.3.11-I001-i686.exe
OpenVPN 2.3.3 Windows 64位 安裝文件:
http://swupdate.openvpn.org/community/releases/openvpn-install-2.3.11-I001-x86_64.exe
2、配置client
將OpenVPN服務器上的client.ovpn、ca.crt、client1.crt、client1.key、ta.key上傳到Windows客戶端安裝目錄下的config文件夾(C:\Program Files\OpenVPN\config)
3、啟動OpenVPN GUI
在電腦右下角的openvpn圖標上右擊,選擇“Connect”。正常情況下應該能夠連接成功,分配正常的IP。
這個圖是別人的,所以IP段是10.8.0.0/16 按照我發的實際IP段是172.16.0.0/16網段,按照上面的操作沒有問題,我已經操作過,并不是百度別人復制過來的,只是為了寫這個文章臨時找的圖片。
4、測試
ping通服務器的內網IP,說明已經接入到服務器的內部網絡。
到OpenVPN服務器上查看客戶端的連接情況,查看狀態文件/etc/openvpn/openvpn-status.log:
后續
因同事離職,所以需注銷其vpn證書。即要注銷兩張證書
執行命令進入openvpn的安裝目錄cd /usr/share/easy-rsa/2.0/
在easy-rsa目錄下。使用revoke-full命令來注銷其證書。先把一位同事證書文件放到easy-rsa/keys下,然后執行
# 初始化環境變量
source vars ./revoke-full client1
client1為證書名稱,這條命令執行完成之后, 會在 keys 目錄下面, 生成一個 crl.pem 文件,這個文件中包含了吊銷證書的名單。接著再次執行
./revoke-full client2
這條命令執行完成之后, 會在 keys 目錄下面, 生成一個新的crl.pem 文件覆蓋舊的。
把此crl.pem文件放到相應的配置目錄config下,然后在配置文件加入如下參數,重新啟動openvpn服務器即可。
cp keys/crl.pem /etc/openvpn/keys/ vim /etc/openvpn/server.conf crl-verify keys/crl.pem
注:如以后需要再注銷其他證書,可繼續執行revoke-full client3,生成新的crl.pem文件替換配置目錄下的文件,重新啟動openvpn服務即可。