SNAT服务搭建:IP分享

准备

首先使用vmware创建两台虚拟机,这里全部选用了centos7系统,

同时虚拟机的网络链接使用桥接,桥接的方式使每一个虚拟机在网络内和独立的机器表现一致

SNAT服务器的网络参数设置

创建虚拟网卡,并设置私有IP地址

查看SNAT服务器的ip地址

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这个网段当作私有ip

ip add address 
复制代码

此时查看ip地址

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这一条记录了

此时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
复制代码

设置完成后整个链路就变成了下图

于是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的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 机器上去!

转载于:https://juejin.im/post/5c925a17f265da611f1d86a0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值