由于不可抗拒的原因,单位决定要到华为NE40下架,so,决定用台linux服务器来做NAT代替路由器。
# 环境
简化成:多Vlan+路由器 用户层到二层交换机,然后汇聚到核心三层交换机。 linux(CentOS 7)服务器一公网地址网卡,一张内网网卡。
# 硬件连接
三层交换机GigabitEthernet2/2/4接服务器enp7s0f1网卡
华为交换机配置:
vlan 3000
q
interface vlanif 3000
ip address 172.16.254.254 255.255.255.0
q
interface GigabitEthernet2/2/4
port link-type aceess
port default vlan 3000
linux服务器的网卡设置静态地址为172.16.254.253
最后我们再加一条默认路由,将流量转发到linux服务器接口。
ip route-static 0.0.0.0 0.0.0.0 172.16.254.253
下一跳地址就是服务器内网网卡的地址。
# NAT
NAT是一种将私有(保留)地址转化为合法IP地址的转换技术。而Linux下强大的iptables就有nat功能, 之前用树莓派做路由器就是使用iptables.
# 开启linux转发
echo "1" > /proc/sys/net/ipv4/ip_forward
这条临时生效,要永久生效我们得更改/etc/sysctl.conf
添加
net.ipv4.ip_forward=1
最后 sysctl -p 使之生效。
# iptables
添加nat链
iptables -t nat -A POSTROUTING -o enp7s0f0 -j MASQUERADE
这里 enp7s0f0 是外网地址的网卡。
# 路由表
上一步做好转发后,我们就做回执路由,不然数据包不能回到内网。
route add -net 10.0.0.0/24 gw 172.16.254.254 dev enp7s0f1
route add -net 172.16.0.0/24 gw 172.16.254.254 dev enp7s0f1
其中172.16.254.254是三层交换机跟linux服务器相连的接口地址。
到这里我们这全部设置完成了,但是这种是重启后失效,所以我们需要添加永久路由表
我们只需把上面路由表命令写到/etc/rc.local即可。
# linux nat优化
专业的路由器都是硬件nat,而且针对nat优化过,linux 下也可以相应的nat优化一下。
网上文章很少,且有点旧这里我直接贴 修改的文件
[root@CentOS ]# cat /etc/sysctl.conf
# System default settings live in /usr/lib/sysctl.d/00-system.conf.
# To override those settings, enter new settings here, or in an /etc/sysctl.d/<name>.conf file
#
# For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.tcp_keepalive_intvl =15
net.ipv4.tcp_retries2 = 5
net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_max_orphans = 32768
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_wmem = 8192 131072 16777216
net.ipv4.tcp_rmem = 32768 131072 16777216
net.ipv4.tcp_mem = 786432 1048576 1572864
net.ipv4.ip_local_port_range = 1024 65000
net.nf_conntrack_max = 65536
net.netfilter.nf_conntrack_max=65536
net.netfilter.nf_conntrack_tcp_timeout_established=180
net.core.somaxconn = 16384
net.core.netdev_max_backlog = 16384
主要 更改 存储 conntrack 条目哈希表的大小, 已建立的tcp连接的超时时间, 本地开放端口范围,进入包的最大设备队列 等。
# 查看转发情况
推荐两款网卡流量监控工具iftop nethogs
nethogs
iftop
# 总结
linux iptables 功能非常强大,同时cpu占用率一点都不高。半个月的运行还算稳定,没出任何问题,但是心里始终不放心,与专业的路由器设备比,稳定性,转发效率估计还是有很大的距离。
##参考