编辑
2023-08-21
iptables
00

目录

iptables两个私网通讯实验实例
一、实验拓扑图
二、环境准备和相关命令
1、环境准备
2、相关命令
到此两个私网直接已经互联互通,通过两个linux作为防火墙可以做到,工作中使用linux做防火墙的其实不多,受性能限制,且成熟厂家很多,但是在云计算中linux防火墙作为主机的规则还是很有必要的。
扩展

iptables两个私网通讯实验实例

引言

今天上班有个同事问我,两个私网直接怎么通讯,通过iptables防护墙。懵逼了十几秒,虽然我知道使用NAT的SNAT和DNAT可以实现,原理也明白,给他讲了半天,但是不上手操作一下还是觉得他还是不理解(实操确实能加深记忆),那还是做个实验回顾一下NAT。

一、实验拓扑图

image.png

  1. 简述一下实验目的:

    • 让lan-server1和lan-server2实现双向通讯,可以ping通可以访问网站页面。要实现这个目标需要做两次SNAT和两次DNAT管理命令。

    • 例如:在iptables-1上设置lan-server1的SNAT设置,在iptables-2上设置DNAT的设置。最后达到lan-server1可以和lan-server2互联互通。lan-server2要想和lan-server1互联互通原理一致。

  2. NAT原理

    NAT: network address translation,支持PREROUTING,INPUT,OUTPUT,POSTROUTING四个链请求报文:修改源/目标IP,由定义如何修改 响应报文:修改源/目标IP,根据跟踪机制自动实现 NAT的实现分为下面类型

  • SNAT:source NAT ,支持POSTROUTING, INPUT,让本地网络中的主机通过某一特定地址访问 外部网络,实现地址伪装,请求报文:修改源IP
  • DNAT:destination NAT 支持PREROUTING , OUTPUT,把本地网络中的主机上的某服务开放给外 部网络访问(发布服务和端口映射),但隐藏真实IP,请求报文:修改目标IP
  • PNAT: port nat,端口和IP都进行修改

二、环境准备和相关命令

1、环境准备

  1. 两台防火墙服务器打开转发功能,echo 'net.ipv4.ip_forward = 1' >> /etc/sysctl.conf。然后sysctl -p生效即可
  2. lan-server1的网关指向iptables-1的仅主机地址,修改默认路由命令我会放到最后。
  3. lan-server2的网关指向iptables-2的仅主机地址
  4. 所有机器安装iptables包
  5. 在两台lan-server上安装httpd服务,修改默认页面

2、相关命令

  1. 刚开始在lan-server上ping iptables-2是ping不通的,这里先做SNAT。
sh
#地址ping不通 [22:54:32 root@lan-server1~]#ping 10.0.0.138 PING 10.0.0.138 (10.0.0.138) 56(84) bytes of data. #在iptables-1上设置SNAT,在nat表上增加一条源地址是192.168.10段的地址,目标地址非192.168.10段的地址,做地址转换基于MASQUERADE,也就是说源IP改变,目标IP不变。 [root@iptables-1 ~]#iptables -t nat -A POSTROUTING -s 192.168.10.0/24 ! -d 192.168.10.0/24 -j MASQUERADE #这时候再访问iptables-2发现访问成功 [22:54:32 root@lan-server1~]#ping 10.0.0.138 PING 10.0.0.138 (10.0.0.138) 56(84) bytes of data. 64 bytes from 10.0.0.138: icmp_seq=1 ttl=63 time=1.43 ms 64 bytes from 10.0.0.138: icmp_seq=2 ttl=63 time=1.86 ms #但是访问lan-server2的页面时还是无法访问 [22:54:32 root@lan-server1~]#curl 192.168.234.128 curl: (7) Failed to connect to 10.0.0.138 port 80: Connection refused #需要在iptables-2上设置DNAT命令,这条命令的意思是在nat表上添加一条命令,访问目标地址10.0.0.138上tcp的80端口请求转发到192.168.234.128的80端口上 [root@iptables-2 ~]# iptables -t nat -A PREROUTING -d 10.0.0.138 -p tcp --dport 80 -j DNAT --to-destination 192.168.234.128:80 #测试一下 [22:54:32 root@lan-server1~]#curl 10.0.0.138 <h1>internet Website </h1> [22:54:32 root@lan-server1~]#curl 192.168.234.128 <h1>internet Website </h1> #测试成功,实现了lan-server1访问lan-server2的页面。

提示

我这里是模拟两个私网直接访问,默认我们是不知道对方内网的地址的,我们只知道对方iptables-2的地址,虽然这里测试可以访问对方lan-server2的地址也可以连接,但是其实我们是不知道的lan-server2的地址的。

  1. 上面已经实现了lan-server1访问lan-server2的SNAT和DNAT,但是这时候lan-server2是访问不了lan-server1的,原理一致就不讲解了,直接上命令。
sh
#iptables-2上做SNAT iptables -t nat -A POSTROUTING -s 192.168.234.0/24 ! -d 192.168.234.0/24 -j MASQUERADE #iptables-1上做DNAT iptables -t nat -A PREROUTING -d 10.0.0.38 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.131:80 #测试 [22:54:32 root@lan-server2~]#curl 10.0.0.38 <h1>lan server</h1> [22:54:32 root@lan-server2~]#curl 192.168.10.131 <h1>lan server</h1>

到此两个私网直接已经互联互通,通过两个linux作为防火墙可以做到,工作中使用linux做防火墙的其实不多,受性能限制,且成熟厂家很多,但是在云计算中linux防火墙作为主机的规则还是很有必要的。

扩展

  1. 查看、删除、添加路由
sh
#查看 [23:57:11 root@rocky ~]#ip route default via 192.168.10.129 dev ens160 proto dhcp src 192.168.10.131 metric 100 192.168.10.0/24 dev ens160 proto kernel scope link src 192.168.10.131 metric 100 #删除 [23:57:11 root@rocky ~]#ip route del default via 192.168.10.129 dev ens160 proto dhcp src 192.168.10.131 metric 100 #添加 [23:57:11 root@rocky ~]#ip route add default via 192.168.10.129 dev ens160 proto dhcp src 192.168.10.131 metric 100
  1. REDIRECT---是NAT表的 target,通过改变目标IP和端口,将接受的包转发至同一个主机的不同端口,可 用于PREROUTING OUTPUT链
sh
#上面在iptables上做了DNAT地址转换,但是后端服务器的端口如果发生改变,iptables马上修改不了规则的时候使用这条命令,在lan-server2上操作 #这条命令的意思是访问本机的tcp80端口时转发到本机的8080端口,这里PREROUTING后面可以跟选项-d 192.168.234.128 设置目标地址是本机,这里可写可不写 iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:笑一个吧~

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 本文为博主「笑一个吧~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 许可协议。转载请注明出处!