网关服务端说明
ens33 192.168.1.111 ===>外网,生产环境中应为公网IP
ens36 172.16.1.1 ===>内网,自定义网络,vmware中设置为仅局域网
[root@node1 ~]# uname -a
Linux node1 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
[root@node1 ~]# cat /etc/centos-release
CentOS Linux release 7.9.2009 (Core)
网关服务端前期设置
关闭selinux、firewalld、NetworkManager
[root@node1 ~]# systemctl stop firewalld && systemctl disable firewalld
[root@node1 ~]# setenforce 0
[root@node1 ~]# vim /etc/selinux/config
SELINUX=disabled
[root@node1 ~]# systemctl stop NetworkManager && systemctl disable NetworkManager
网关服务端配置
[root@node1 ~]# cd /etc/sysconfig/network-scripts/
[root@node1 network-scripts]# cat ifcfg-ens33
TYPE="Ethernet"
BOOTPROTO="static"
NAME="ens33"
DEVICE="ens33"
HWADDR=00:0C:29:BB:6E:38 ===> ifconfig 可查看
ONBOOT="yes"
IPADDR="192.168.1.111" ===> 本机内网地址,生产中为运营商提供的公网地址
PREFIX="24" ===> 掩码也是运营商提供
[root@node1 network-scripts]# cp ifcfg-ens33 ifcfg-ens36
[root@node1 network-scripts]# cat ifcfg-ens36
TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="yes"
NAME="ens36"
DEVICE="ens36"
HWADDR=00:0C:29:BB:6E:42
ONBOOT="yes"
IPADDR="172.16.1.1" ===> 内网网段地址,当作内网的网关使用
PREFIX="24"
注:这里不用写网关和DNS
# 填写网关
[root@node1 network-scripts]# cat /etc/sysconfig/network
# Created by anaconda
NETWORKING=yes
HOSTNAME=node1
GATEWAY=192.168.1.1 ===> 内网中的实际网关
# 配置DNS
[root@node1 network-scripts]# vim /etc/resolv.conf
nameserver 192.168.1.1 // 内网中实际的DNS,生产中应为公网上的DNS
nameserver xx.xx.xx.xx // 备
安装iptables和网络工具
[root@node1 ~]# yum -y install iptables-services net-tools
注:先安装上iptables,不启动
设置ulimit
[root@node1 ~]# vim /etc/security/limits.conf
* soft nofile 32768
* hard nofile 65536
设置时间同步 chronyd
加载模块
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
[root@node1 ~]# echo -e "modprobe nf_conntrack\nmodprobe ip_commtrack">> /etc/rc.local
[root@node1 ~]# reboot //重启生效
[root@node1 ~]# ulimit -n //查看软
[root@node1 ~]# ulimit -a //查看所有
启动iptables
[root@node1 ~]# systemctl start iptables && systemctl status iptables
内核优化
[root@node1 ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1 ===> 必须开启数据转发
fs.nr_open = 2048576
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 2
net.ipv4.tcp_max_syn_backlog = 65536
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_max_tw_buckets = 81920
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_retries2 = 10
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_rmem = 4096 16777216 33554432
net.ipv4.tcp_wmem = 4096 16777216 33554432
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_max_orphans = 3276800
net.ipv4.tcp_slow_start_after_idle = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
net.core.somaxconn = 32768
net.core.rmem_default = 335544320
net.core.wmem_default = 83886000
net.core.rmem_max = 335544320
net.core.wmem_max = 83886000
net.core.netdev_max_backlog = 100000
net.nf_conntrack_max = 25000000
net.netfilter.nf_conntrack_max = 25000000
net.netfilter.nf_conntrack_tcp_timeout_established = 7200
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
[root@node1 ~]# sysctl -p
实现控制方法及脚本
[root@node1 ~]# mkdir /opop && cd /opop
[root@node1 opop]# vim gateway.sh
#!/bin/bash
FILE=/opop/mac_new.txt
modprobe iptable_nat
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_nat_ftp
iptables -F INPUT
iptables -F OUTPUT
iptables -F FORWARD
iptables -t nat -F
iptables -t nat -X
iptables -F
iptables -X
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
cat $FILE | while read ipad mac
do
iptables -A FORWARD -s $ipad -m mac --mac-source $mac -j ACCEPT
arp -s $ipad $mac
done
iptables -A FORWARD -o ens36 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o ens33 -m iprange --src-range 172.16.1.1-172.16.1.254 -j SNAT --to 192.168.1.111
########### Port forwarding ##############
#iptables -t nat -A PREROUTING -i ens33 -d <公网地址> -p tcp --dport 80 -j DNAT --to-destination <内网地址>
#iptables -t nat -I POSTROUTING -d <公网地址> -p tcp --dport 80 -j SNAT --to <内网地址>
#iptables -A FORWARD -o ens36 -d <内网地址> -p tcp --dport 80 -j ACCEPT
################## THE END ###############
iptables -A FORWARD -j DROP
service iptables save
chkconfig iptables on
[root@node1 opop]# chmod +x gateway.sh
[root@node1 opop]# vim mac_new.txt
格式:
172.16.1.15 00:0c:29:f1:e2:f9
172.16.1.16 00:0c:29:bb:6e:42
....
....
[root@node1 opop]# sh gateway.sh
iptables备份
[root@node1 ~]# iptables-save > iptables.bak
恢复
[root@node1 ~]# iptables-resotre < iptables.bak
[root@node1 ~]# vim /etc/rc.local
modprobe nf_conntrack
modprobe ip_conntrack
注1:nf_conntrack是一个内核模块,用于跟踪一个连接的状态的
注2:kernel 用 ip_conntrack 模块来记录 iptables 网络包的状态,并把每条记录保存到table里(这个 table 在内存里,可以通过/proc/net/ip_conntrack查看当前已经记录的总数)
配置客户端并测试
Linux服务器
systemctl stop NetworkManager && systemctl disable NetworkManager
vim /etc/sysconfig/network-scripts/ifcfg-ens33
DEVICE=ens33
HWADDR=00:0C:29:D3:9F:8E
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=172.16.1.20
NETMASK=255.255.255.0
GATEWAY=172.16.1.1 ===> 网关服务器的内网IP
DNS1=192.168.1.1 ===> 生产中应为公网DNS
systemctl restart network
测试连通性
ping 172.16.1.1
ping 192.168.1.1
ping 192.168.1.111
ping www.baidu.com
dig www.baidu.com
curl www.baidu.com
等域名或IP进行测试
Windows主机
桌面右击“网络”---“属性”---“更改是配置设置”---右击“Ethernet0”---“属性”---双击“Internet协议版本4(TCP/IPV4)”---选中“使用下面的IP地址”--->|
IP地址:172.16.1.30 ===> 主机位设哪个都行
子网掩码:255.255.255.0
默认网关:172.16.1.1 ===> 服务端ens36网卡的地址
首选DNS服务器:192.168.1.1 ===> 生产中应为公网上的DNS
备用DNS服务器:xxx.xxx.xxx.xx
Linux学习QQ群