因爲IPv4中IP地址空間的日益緊張和安全方面的緣由,不少網絡使用 保留IP地址(10.0.0.0/255.0.0.0、172.16.0.0/255.128.0.0和192.168.0.0 /255.255.0.0)[64, 65, 66]。這些地址不在Internet上使用,而是專門爲內部網絡預留的。當內部網絡中的主機要訪問Internet或被Internet訪問時,就須要 採用網絡地址轉換(Network Address Translation, 如下簡稱NAT),將內部地址轉化爲Internets上可用的外部地址。NAT的工做原理是報文頭(目標地址、源地址和端口等)被正確改寫後,客戶相信 它們鏈接一個IP地址,而不一樣IP地址的服務器組也認爲它們是與客戶直接相連的。由此,能夠用NAT方法將不一樣IP地址的並行網絡服務變成在一個IP地址 上的一個虛擬服務。html
VS/NAT的體系結構如圖所示。在一組服務器前有一個調度器,它們是經過Switch/HUB相鏈接的。這些服務器 提供相同的網絡服務、相同的內容,即無論請求被髮送到哪一臺服務器,執行結果是同樣的。服務的內容能夠複製到每臺服務器的本地硬盤上,能夠經過網絡文件系 統(如NFS)共享,也能夠經過一個分佈式文件系統來提供。nginx
客戶經過Virtual IP Address(虛擬服務的IP地址)訪問網絡服務時,請求報文到達調度器,調度器根據鏈接調度算法從一組真實服務器中選出一臺服務器,將報文的目標地址 Virtual IP Address改寫成選定服務器的地址,報文的目標端口改寫成選定服務器的相應端口,最後將修改後的報文發送給選出的服務器。同時,調度器在鏈接Hash 表中記錄這個鏈接,當這個鏈接的下一個報文到達時,從鏈接Hash表中能夠獲得原選定服務器的地址和端口,進行一樣的改寫操做,並將報文傳給原選定的服務 器。當來自真實服務器的響應報文通過調度器時,調度器將報文的源地址和源端口改成Virtual IP Address和相應的端口,再把報文發給用戶。算法
NAT基本架構實現
vim
環境準備:安全
設備 |
軟件環境 |
網絡環境 |
virtual_server(dir) |
CentOS 6.6+IPVS(ipvsadm) |
eth0 : VIP : 192.168.137.128 (對外服務的IP,客戶端訪問的IP)服務器 |
eth1 : IP:192.168.1.121 |
||
real_server_a(rsa) |
CentOS 6.6+nginx(監控的服務項目) |
eth0 : IP:192.168.1.118 |
real_server_b(rsb) |
CentOS 6.6+nginx(監控的服務項目) |
eth0 : IP:192.168.1.119 |
配置方法:網絡
# 首先在rsa與rsb中啓動nginx,測試是否能夠正常訪問 [root@rsa ~]# /etc/init.d/nginx start 正在啓動 nginx: [肯定]
# 爲了訪問更加直觀,咱們修改一下主頁 [root@rsa ~]# vim /usr/share/nginx/html/index.html This is test page,this is A. [root@rsa ~]# /etc/init.d/nginx reload 從新載入 nginx: [肯定] # 咱們在看一下
# 當rsa與rsb的nginx均可以正常訪問,咱們須要將兩臺設備的網關修改成dir的內網的IP [root@rsa ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 TYPE=Ethernet UUID=779f98ef-706a-4b8c-9e78-75fa1e79fcab ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=static HWADDR=00:0C:29:56:5C:C5 DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no NAME="System eth0" IPADDR=192.168.1.118 NETMASK=255.255.255.0 GATEWAY=192.168.1.121 DNS1=202.96.128.166 DNS2=202.96.134.133 [root@rsa ~]# service network restart 正在關閉接口 eth0: [肯定] 關閉環回接口: [肯定] 彈出環回接口: [肯定] 彈出界面 eth0: Determining if ip address 192.168.1.118 is already in use for device eth0... [肯定]
接下來咱們開始配置dir的機器,咱們以腳本的形式去配置架構
[root@dir ~]# vim /usr/local/sbin/lvs_nat.sh #! /bin/bash # director 服務器上開啓路由轉發功能: echo 1 > /proc/sys/net/ipv4/ip_forward # 關閉icmp的重定向 echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects echo 0 > /proc/sys/net/ipv4/conf/eth1/send_redirects # director 設置nat防火牆 iptables -t nat -F iptables -t nat -X iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE # director設置ipvsadm IPVSADM='/sbin/ipvsadm' $IPVSADM -C $IPVSADM -A -t 192.168.137.128:80 -s rr $IPVSADM -a -t 192.168.137.128:80 -r 192.168.1.118:80 -m -w 1 $IPVSADM -a -t 192.168.137.128:80 -r 192.168.1.119:80 -m -w 1 [root@dir ~]# chmod a+x !$ chmod a+x /usr/local/sbin/lvs_nat.sh [root@dir ~]# /bin/bash /usr/local/sbin/lvs_nat.sh # 查看配置的狀態 [root@dir ~]# ipvsadm -ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.137.128:80 rr -> 192.168.1.118:80 Masq 1 0 0 -> 192.168.1.119:80 Masq 1 0 0
接下來咱們經過VIP進行訪問測試分佈式