前段時間寫了一篇有關open***搭建與內網機器通信的文章,那篇文章是基於服務器單網卡進行配置的,文章鏈接爲《爛泥:open*** tun模式下客戶端與內網機器通信》。
這篇文章我們再來介紹下雙網卡open***客戶端與內網機器通信的配置。
一、需求說明
爲什麼要寫open***雙卡的配置?
是因爲一般IDC機房都是提供多網卡服務器,同時目前比較流行的雲服務器阿里雲提供的也是雙網卡,而騰訊雲以及亞馬遜的aws都是單網卡。各個雲服務器商的網卡配置個數,如下圖:
二、業務要求
現在IDC機房那邊有一臺服務器配A配置的是雙網卡,一塊配置的是公網IP(173.33.141.50),一塊配置的是內網IP(10.10.1.17)。另外在這個IDC機房內的其他服務器,爲了安全起見,配置都是的內網IP10.10.1.0/24網段的。
現在要求很簡單,通過服務器A管理內網的其他服務器。
三、解決方案
爲了達到上述要求,我們可以在服務器A上搭建open***服務,然後客戶端通過這臺open***服務器作爲跳板機管理內網服務器。
open***的搭建很簡單,可以參考這篇文章《爛泥:ubuntu 14.04搭建Open***服務器》。
這裏有個難點就是客戶端與內網服務器通信的問題。
open***客戶端與內網服務器通信問題,如果是單網卡的話,我們只需要按照《爛泥:open*** tun模式下客戶端與內網機器通信》這篇文章進行操作即可。
那麼服務器雙網卡如何配置呢?
其實雙網卡的配置,其實和單網卡的配置差不多,都是要修改open***服務的配置文件和配置iptables規則。只是iptables規則改變下了而已,下面我們實際配置下。
四、open***具體配置
open***服務配置文件內容如下:
grep -vE '^;|^$|^#' /etc/open***/server.conf
port 1194
proto tcp
dev tun
ca ca.crt
cert ilanni.crt
key ilanni.key # This file should be kept secret
dh dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 10.10.1.0 255.255.255.0"
push "dhcp-option DNS 223.5.5.5"
client-to-client
duplicate-cn
keepalive 10 120
comp-lzo
persist-key
persist-tun
status open***-status.log
log open***.log
verb 3
上述open***服務配置文件中,push "route 10.10.1.0 255.255.255.0"這條命令一定要有,它是推送給客戶端的路由配置。
五、IPtables配置
open***配置完畢後,我們現在開始配置open***服務器的IPtables規則。
現在服務器的網卡配置如下:
ifconfig
通過上圖,我們可以看到網卡em2是和內網進行通信的,我們現在需要做的就是把所有從open***客戶端(10.8.0.0/24)請求到10.10.1.0/24網段的數據全部僞裝成網卡em2(10.10.1.17)發出的。也就是說需要在iptables上做一個NAT規則。
命令如下:
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o em2 -j SNAT --to-source 10.10.1.17
iptables -nL -t nat
上述命令的意思是把所有來自10.8.0.0/24網段的請求僞裝成10.10.1.17這個IP地址,然後通過em2這個網卡發出。
也可以直接修改iptables的配置文件,如下:
-A POSTROUTING -s 10.8.0.0/24 -o em2 -j SNAT --to-source 10.10.1.17
然後重新加載iptables規則。
如果是centos系統的話,直接使用/etc/init.d/iptables restart命令重啓iptables。
如果是ubuntu系統的話,使用sudo iptables-restore /home/Ubuntu/iptables.rule。
六、測試通信情況
open***服務與iptables規則都配置完畢後,現在我們切換到客戶端進行測試。
客戶端連接open***服務器,如下:
open*** --config lianzhou.o*** &
通過上圖,我們可以很明顯的看出客戶端已經正確連接open***服務器,並且獲得10.8.0.6這個IP地址。
現在我們再來測試它與10.10.1.0/24網段的連通情況,如下:
ping 10.10.1.12
通過上圖,我們可以很明顯的看到客戶端已經可以與10.10.1.12正常通信。
現在我們再來嘗試連接下10.10.1.12這臺機器,如下:
telnet 10.10.1.12 22
通過上圖,我們可以很明顯的看出客戶端已經可以連接10.10.1.12這臺服務器。
如果客戶端在連接內網服務器中出現如下的錯誤提示:
telnet: Unable to connect to remote host: No route to host
這個一般是open***服務器的iptables規則不正確導致的,建議是先使用iptables –F命令清除iptables規則保留nat規則進行調試。