nat表应用
环境:
A机器两块网卡ens33(192.168.133.130)、ens37(192.168.100.1),ens33可以上外网,ens37仅仅是内部网络,B机器只有ens37(192.168.100.100),和A机器ens37可以通信互联。
需求1:可以让B机器连接外网
A机器上打开路由转发 echo "1">/proc/sys/net/ipv4/ip_forward
A上执行 iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE(让192.168.100.0网段的数据能够通过外网网卡访问外网)
B上设置网关为192.168.100.1
需求2:C机器只能和A通信,让C机器可以直接连通B机器的22端口
A上打开路由转发echo "1">/ proc/sys/net/ipv4/ip_forward
A上执行iptables -t nat -A PREROUTING -d 192.168.133.130 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22
A上执行iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.133.130
B上设置网关为192.168.100.1
实现:
首先准备两台机器(若是怕实验失败,可先快照下)
在虚拟机A上在添加一块网卡(已添加过一块虚拟网卡)
然后默认的是NAT模式,然后点击完成
在选择添加的网卡,并在右侧,选择LAN区段
选择LAN区段,就相当于我们给网卡连接到了内网的一个交换机上,这个交换机,用windows机器是无法连接的,这样这台机器和那台机器连上同一个内网的交换机,它们两者之间通信即可。
然后选择LAN区段中,刚设置的名称为“内网”
选择克隆的虚拟机B,并添加网卡——>在这台虚拟机上本身有一块网卡,因为已经编辑过IP,所以我们可以直接禁掉这个网卡
然后B添加一块网卡,和hf添加网卡步骤一样相同,并选择LAN区段,中的“内网”,并确认
重启两台虚拟机
B虚拟机中没有了windows所能连接的IP,所以就无法远程连接B
打开A虚拟机,输入ifconfig命令,会看到添加了一个网卡eno33554984
这里会看到eno33554984网卡,并没有IP,并设置IP(新建那个当私网IP,你可以跟跟视频中的一样,也可以自己设置)
设定IP有两种方法:
1.可以命令行添加IP
命令行ifconfig eno3355498 192.168.100.1/24
2.也可以设置配置文件,设置配置文件和设置虚拟网卡一样的步骤
将eno16777736网卡配置文件复制成eno33554984,并修改里面的IP和NETMASK即可其他都不需要管
执行命令行ifconfig eno3355498 192.168.100.1/24,然后运行ifconfig命令,会看到eno33554984网卡有了IP
但是eno33554984网卡的IP,在虚拟机一重启,那么IP就会没了——>若想永久生效,就去编辑配置文件,但默认配置文件是不存在的,需要拷贝eno16777736网卡的配置文件,然后更改其中的内容
因为hf-02虚拟机无法远程,所以只能在虚拟机上操作
用ifconfig命令查看hf-02虚拟机的网卡,会发现也没有IP地址
这里若想完全禁掉eno16777736网卡,可执行ifdown eno16777736命令(这一步可省略,只要再设置好IP 192.168.100.100/24,两个私网IP互通即可,)
但有时会提示MAC地址不对,这时候进网卡配置文件中
方法一:注释掉HWADDR参数
方法二:看是否存在DEVICE参数。若没有,则增加上DEVICE参数——>(自己的是没有的)
方法三:直接删除之前的网卡,新建虚拟网卡
给eno33554984网卡设置IP地址,命令行ifconfig eno33554984 192.168.100.100/24
然后用ifconfig命令,查看新建的网卡IP地址
这时hf机器上需要打开路由转发 ——>想使用nat表,使用网络的转发,必须修改内核参数
默认/proc/sys/net/ipv4/ip_forward这个文件为0——>这个文件为0,表示这个文件没有开启内核转发
[root@hanfeng ~]#
将文件/proc/sys/net/ipv4/ip_forward默认改为1,打开端口转发
要想实现nat应用,必须打开端口转发
echo "1" > /proc/sys/net/ipv4/ip_forward
在A虚拟机上增加一条规则iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o eno16777736 -j MASQUERADE(操作前运行iptables -F排除规则干扰)
实现100.0网段可以上网,做一个欺骗
给B虚拟机设置网关(数据包过去,从A到B,从B到A,设置好默认网关)
route add default gw 192.168.100.1
然后B尝试是否能ping通192.168.202.130,这就意味着可以和外网通信了
设置DNS,在/etc/resolv.conf中设置,添加nameserver 119.29.29.29
这时候就可以ping通外网了——>但物理机还是无法ping通B的虚拟机IP地址
需求2:C机器只能和A通信,让C机器可以直接连通B机器的22端口(通过A让C远程登录B)
A上打开路由转发echo "1">/proc/sys/net/ipv4/ip_forward
A上执行iptables -t nat -A PREROUTING -d 192.168.133.130 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22
A上执行iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.133.130
B上设置网关为192.168.100.1先在A上打开路由转发功能(echo "1">/proc/sys/net/ipv4/ip_forward,重启后失效)
(执行之前,先清除之前的规则iptables -t nat -D POSTROUTING -s 192.168.100.0/24 -o eno16777736 -j MASQUERADE或iptables -t nat -F)
在A上执行
iptables -t nat -A PREROUTING -d 192.168.133.130 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22(将收到目标地址为192.168.133.130的1122端口数据,转发给
192.168.100.100的22端口)
iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.133.130(将源地址为192.168.100.100的数据转发给192.168.133.130)
B上设置网关为192.168.100.1
新建连接ip为A的地址,端口为1122
且B依旧可通过A进行连接外网