iptables内网访问外网 ε=ε=ε=(~ ̄▽ ̄)~
介绍
iptables概述:
netfilter/iptables : IP信息包过滤系统,它实际上由两个组件netfilter 和 iptables 组成。
netfilter/iptables 关系:
netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。
IP地址规划
主机名 | eth0 | eth1 | 作用 |
firewalld | 10.0.0.81 | 172.16.1.81 | 防火墙 |
m01 | 10.0.0.61 | 172.16.1.61 (ifdown) | 批量管理 |
m01通过内网网关(访问firewalld内网IP地址)进行地址转换,从而访问外网。
流程图:
防火墙服务安装部署
[root@firewalld ~]# yum install -y iptables-services
[root@firewalld ~]# systemctl start iptables
修改m01网卡配置
因为是内网访问所以我们无需使用eth0,直接down就可以
[root@m01 ~]# ifdown eth0 [root@m01 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1
TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=none DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=eth1 UUID=ae935876-ade9-4a88-b7d7-45fb1fc6d690 DEVICE=eth1 ONBOOT=yes IPADDR=172.16.1.61 PREFIX=24 GATEWAY=172.16.1.81 #网关是firewalld的内网IP地址 DNS1=223.5.5.5 #要有DNS解析,否则无妨上网
修改完需要我们重启eth1网卡:
[root@m01 ~]# ifdown eth1 && ifup eth1 Device 'eth1' successfully disconnected. Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/9)
修改firewalld的网卡配置
forward 表 负责转发流经主机的数据包,起转发的作用,和NAT关系很大
LVS NAT 模式,net.ipv4.ip_forward=0
[root@firewalld ~]# echo "1"> /proc/sys/net/ipv4/ip_forward #修改当前系统内存中ip_forward的值,这是开启ip转发 [root@firewalld ~]# cat /proc/sys/net/ipv4/ip_forward 1 [root@firewalld ~]# sysctl -p
或者: [root@firewalld ~]# vim /etc/sysctl.conf #最后一行加上 net.ipv4.ip_forward = 1 [root@firewalld ~]# sysctl -p
firewalld防火墙配置
POSTROUTING: 表示数据包在从一个接口要流出, 做一个地址映射
PREROUTING: 表示数据包在从一个接口要流入, 做一个地址转换
OUTPUT : 表示将防火墙自身产生的数据流量做地址或者端口转换
[root@firewalld ~]# iptables -t nat -A POSTROUTING -s 172.16.1.61 -o eth0 -j SNAT --to-source 10.0.0.81 #将172.16.1.61IP地址转换为10.0.0.81 [root@firewalld ~]# service iptables save #保存设置,将上面的设置写入文件内
[root@m01 ~]# iptables-save #查看内容 # Generated by iptables-save v1.4.21 on Thu Dec 12 11:57:05 2019 *nat :PREROUTING ACCEPT [97:8398] :INPUT ACCEPT [29:3621] :OUTPUT ACCEPT [241:17235] :POSTROUTING ACCEPT [241:17235] -A POSTROUTING -s 172.16.1.61/32 -o eth0 -j SNAT --to-source 10.0.0.81 COMMIT # Completed on Thu Dec 12 11:57:05 2019 # Generated by iptables-save v1.4.21 on Thu Dec 12 11:57:05 2019 *filter :INPUT ACCEPT [3671:291941] :FORWARD ACCEPT [369:29004] :OUTPUT ACCEPT [2777:276150] COMMIT # Completed on Thu Dec 12 11:57:05 2019
m01 进行测试:
[root@m01 ~]# ping baidu.com PING baidu.com (220.181.38.148) 56(84) bytes of data. 64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=1 ttl=128 time=430 ms 64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=2 ttl=128 time=245 ms 64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=3 ttl=128 time=457 ms 64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=4 ttl=128 time=255 ms
实验完成,最核心的是iptables的配置,需要用到nat表中的POSTROUTING