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 封包接收的示意图
相关文章
相关标签/搜索