SNAT服務搭建:IP分享

準備

首先使用vmware建立兩臺虛擬機,這裏所有選用了centos7系統,後端

同時虛擬機的網絡連接使用橋接,橋接的方式使每個虛擬機在網絡內和獨立的機器表現一致centos

SNAT服務器的網絡參數設置

建立虛擬網卡,並設置私有IP地址

查看SNAT服務器的ip地址bash

ip address show
複製代碼

顯示服務器

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:21:73:be brd ff:ff:ff:ff:ff:ff
    inet 192.168.199.134/24 brd 192.168.199.255 scope global noprefixroute dynamic ens33
       valid_lft 35442sec preferred_lft 35442sec
    inet6 fe80::59eb:3929:5162:3f61/64 scope link tentative noprefixroute dadfailed
       valid_lft forever preferred_lft forever
    inet6 fe80::957e:fa38:5e70:d608/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
複製代碼

說明已經經過DHCP獲取到了局域網IP,這個網段爲192.168.199.0/24,所綁定的網卡爲ens33網絡

咱們就把這個網段看成公網ip(只能是看成了。。。)架構

咱們建立一個虛擬網卡ens33:0並綁定192.168.100.201/24這個網段看成私有ipoop

ip add address 
複製代碼

此時查看ip地址ui

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:21:73:be brd ff:ff:ff:ff:ff:ff
    inet 192.168.199.134/24 brd 192.168.199.255 scope global noprefixroute dynamic ens33
       valid_lft 35442sec preferred_lft 35442sec
    inet 192.168.100.201/24 brd 192.168.100.255 scope global ens33:0
       valid_lft forever preferred_lft forever
    inet6 fe80::59eb:3929:5162:3f61/64 scope link tentative noprefixroute dadfailed
       valid_lft forever preferred_lft forever
    inet6 fe80::957e:fa38:5e70:d608/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
複製代碼

已經多了inet 192.168.100.201/24 brd 192.168.100.255 scope global ens33:0這一條記錄了centos7

此時SNAT的網絡設置如圖spa

SNAT服務器

設置iptables規則

第一步設置INPUT鏈爲接受

iptables -A INPUT -i ens33:0 -j ACCEPT
複製代碼

而後開啓轉發功能

echo "1" > /proc/sys/net/ipv4/ip_forward
複製代碼

加入NAT table數據包假裝

iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE
複製代碼

此時的iptables 策略爲

> iptables-save

# Generated by iptables-save v1.4.21 on Wed Mar 20 01:12:40 2019
*nat
:PREROUTING ACCEPT [200:74558]
:INPUT ACCEPT [126:69331]
:OUTPUT ACCEPT [36:2704]
:POSTROUTING ACCEPT [36:2704]
-A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE
COMMIT
# Completed on Wed Mar 20 01:12:40 2019
# Generated by iptables-save v1.4.21 on Wed Mar 20 01:12:40 2019
*filter
:INPUT ACCEPT [343:167886]
:FORWARD ACCEPT [1896:4166748]
:OUTPUT ACCEPT [43:4105]
COMMIT
# Completed on Wed Mar 20 01:12:40 2019
複製代碼

通過上面的設置服務器已經具備了SNAT的功能

PC-ONE網絡參數設置

設置IP地址

首先查看ip地址

ip address add 192.168.100.201/24 broadcast + dev ens33:0
複製代碼

顯示

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:e7:a6:ec brd ff:ff:ff:ff:ff:ff
    inet 192.168.199.176/24 brd 192.168.199.255 scope global noprefixroute dynamic ens33
       valid_lft 43106sec preferred_lft 43106sec
    inet6 fe80::59eb:3929:5162:3f61/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
複製代碼

說明已經經過DHCP獲取到了局域網IP,這個網段爲192.168.199.0/24,所綁定的網卡爲ens33

咱們不用這個,刪除所分配的ip

ip address del 192.168.199.176/24 dev ens33
複製代碼

如今咱們從新設置一個不一樣網段的ip,同時綁定到ens33的網卡上,下面命令重的broadcast + 表示全播地址自動計算

ip address add 192.168.100.200/24 broadcast + dev ens33
複製代碼

設置PC-ONE路由

查看當前路由

> ip route show

192.168.100.0/24 dev ens33 proto kernel scope link src 192.168.100.200
複製代碼

此時ping 咱們模擬的公網服務器192.168.199.116確定是不會通的 由於既不在同一個網段,又沒有設置網關

咱們添加一個默認的網關,網關的地址就是咱們SNAT服務器的私有ip,這個路由信息必須在SNAT服務器設置完私有ip以後才能添加,由於本機與網關之間必須是聯通的狀態

> ip route add default via 192.168.100.201 dev ens33

> ip route show 

default via 192.168.199.1 dev ens33 proto dhcp metric 100
192.168.100.0/24 dev ens33 proto kernel scope link src 192.168.100.200
複製代碼

設置完成後整個鏈路就變成了下圖

SANT架構示意圖

因而PC-ONE就隱藏在了SNAT服務器以後,對外只能看到SNAT服務器的地址,SANT充當着防火牆的做用

數據傳遞鏈路分析

此次咱們在模擬的公網服務器192.168.199.116上監聽一個端口

nc -l 8000
複製代碼

而後在PC-ONE上鍊接此端口確定是能夠聯通的並互相通訊的

從PC-ONE到公網服務器

  1. PC發出的數據報頭來源爲192.168.100.200,傳送到SNAT服務器
  2. SNAT服務器內部接口192.168.100.200接受數據後,分析發現目標地址並不是本機,因此把數據轉到public ip處
  3. SNAT服務器經過iptables的POSTROUTING鏈將數據包的報頭來源假裝成SANT的public ip,並將兩個不一樣來源192.168.100.200和public ip記錄帶內存

SNAT 封包傳送出去的示意圖

因此在公共網絡上看到這個數據的來源都是來自SNAT的public ip

從公網服務器到PC-ONE

  1. 公網服務器會將響應數據傳送給Public IP的主機,即SNAT主機;
  2. 當 Linux NAT 服務器收到來自公網服務器的迴應封包後,會分析該封包的序號,並比對剛剛記錄到內存當中的數據, 因爲發現該封包爲後端主機以前傳送出去的,所以在 NAT Prerouting 鏈中,會將目標 IP 修改爲爲後端主機,亦即那部 192.168.100.200,而後發現目標已經不是本機 (public IP), 因此開始透過路由分析封包流向;
  3. 封包會傳送到 192.168.100.201 這個內部接口,而後再傳送到最終目標 192.168.100.200 機器上去!

SNAT 封包接收的示意圖
相關文章
相關標籤/搜索