本文详细说明了centos7环境下SNAT实验的步骤。
SNAT是Linux系统的概念 SNAT策略的原理:
源地址转换,Source Network Address Translation 在用户的角度出发,用户发出数据时修改数据包的源IP地址,私网转公网;回来时经过NAT转换表公网转私网。
实验准备:
1台客户机(内网),客户机配置一张网卡; 1台机器作为网关路由器,配置2张网卡。
内网的虚拟机网卡模式可以是hostonly或者nat或者桥接。 linux网关路由器的LAN口需使用和内网的虚拟机网卡模式一样。
本次实验,内网的虚拟机网卡使用hostonly模式
1.1 在linux客户机上配置ip地址
查看系统版本:
[root@lb-1 ~]# cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)
配置IP:
[root@lb-1 ~]# cd /etc/sysconfig/network-scripts/
[root@lb-1 network-scripts]# vim ifcfg-ens33
BOOTPROTO="none"
NAME="ens33"
DEVICE="ens33"
ONBOOT="yes"
IPADDR1=192.168.99.8
PREFIX=24
DNS1=114.114.114.114
GATEWAY1=192.168.99.254
刷新网络服务:
[root@lb-1 network-scripts]# service network restart
Restarting network (via systemctl): [ 确定 ]
测试能否和网关通信:
[root@lb-1 ~]# ping 192.168.99.254
能ping通则说明客户机搭建成功。
1.2 linux网关服务器的配置
配置LAN口的ip地址和子网掩码,不配置网关和dns服务器地址,我们会在WAN口上配置。
[root@scrouter ~]# cd /etc/sysconfig/network-scripts/
[root@scrouter network-scripts]# vim ifcfg-ens33
BOOTPROTO="none"
NAME="ens33"
DEVICE="ens33"
ONBOOT="yes"
IPADDR=192.168.99.254
PREFIX=24
刷新服务:
[root@scrouter network-scripts]# service network restart
Restarting network (via systemctl): [ 确定 ]
配置WAN口的ip地址、子网掩码、网关和dns服务器地址 因为新添加的网卡,默认在系统里没有配置文件,我们需要根据ens33的网卡配置文件,创建一个文件,注意名字要和网卡的名字对应(ip add命令可查看2张网卡的名字)
本文的WAN口网卡是ens36
[root@scrouter network-scripts]# cp ifcfg-ens33 ifcfg-ens36
[root@scrouter network-scripts]# vim ifcfg-ens36
BOOTPROTO="none"
NAME="ens36"
DEVICE="ens36"
ONBOOT="yes"
IPADDR=192.168.1.88
PREFIX=24
GATEWAY=192.168.1.1
DNS1=114.114.114.114
刷新网络服务
[root@scrouter network-scripts]# service network restart
Restarting network (via systemctl): [ 确定 ]
查看路由表
[root@scrouter network-scripts]# ip route
default via 192.168.1.1 dev ens36 proto static metric 101
192.168.1.0/24 dev ens36 proto kernel scope link src 192.168.1.88 metric 101
192.168.99.0/24 dev ens33 proto kernel scope link src 192.168.99.254 metric 100
查看dns服务器地址
[root@scrouter network-scripts]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 114.114.114.114
测试linux网关服务器能否上网
[root@scrouter network-scripts]# ping www.baidu.com
PING www.a.shifen.com (14.215.177.39) 56(84) bytes of data.
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=1 ttl=54 time=16.9 ms
64 bytes from 14.215.177.39 (14.215.177.39): icmp_seq=2 ttl=54 time=19.1 ms
1.3 在linux网关服务器上
1.开启网关主机的路由转发功能
临时开启:
root@scrouter ~]# cat /proc/sys/net/ipv4/ip_forward
0
[root@scrouter ~]# echo 1 >/proc/sys/net/ipv4/ip_forward
[root@scrouter ~]# cat /proc/sys/net/ipv4/ip_forward
1
永久开启路由功能,修改内核参数文件/etc/sysctl.conf
[root@scrouter ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@scrouter ~]# sysctl -p #让linux系统的内核读取新的配置,开启路由功能
net.ipv4.ip_forward = 1
2.添加使用SNAT策略的防火墙规则
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ens36 -j SNAT --to-source 218.29.30.31
-t nat 表示在nat表里进行操作 table -A POSTROUTING 表示在POSTROUTING 位置追加一条规则 append -s 192.168.1.0/24 指定源ip地址是来自那个网段 source -o ens33 指定数据从那个接口出去 out interface -j SNAT 采取SNAT动作,修改ip包里的源ip地址 --to-source 218.29.30.31 指定修改ip包里的ip地址为 218.29.30.31是WAN口的ip地址
或者编写snat策略的脚本:
[root@scrouter ~]# vim snat.sh
[root@scrouter ~]# cat snat.sh
#!/bin/bash
#清除filter和nat表里的防火墙规则
iptables -t filter -F
iptables -t nat -F
#开启路由功能
echo 1 >/proc/sys/net/ipv4/ip_forward
#添加SNAT策略
iptables -t nat -A POSTROUTING -s 192.168.99.0/24 -o ens36 -j SNAT --to-source 192.168.1.88
[root@scrouter ~]# bash snat.sh #执行脚本
[root@scrouter ~]# iptables -t nat -L -n #查看nat表里的规则
在客户机上验证是否可以访问百度,可以一步步ping过去,检查问题所在
ping www.baidu.com
如果能ping通说明客户机(内网)可以通过我们配置的网关路由器去上网,自此实验成功!!