首先使用vmware建立两台虚拟机,这里所有选用了centos7系统,后端
同时虚拟机的网络连接使用桥接,桥接的方式使每个虚拟机在网络内和独立的机器表现一致centos
查看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
第一步设置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的功能
首先查看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
复制代码
查看当前路由
> 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上链接此端口确定是能够联通的并互相通讯的
因此在公共网络上看到这个数据的来源都是来自SNAT的public ip