網關服務端說明
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群