Category Archives: 网络

负载均衡后端无法获取终端用户真实IP的解决方案

场景描述

移动云平台,使用了云上的负载均衡,默认配置的4层负载均衡 ,后端服务器为ubuntu 20 ,部署了nginx服务器

问题

nginx 日志查看只能看到100.125.64.104 100.125.64.103 之类的云内地址。

解决

编译加载TOA内核
源码 https://github.com/Huawei/TCP_option_address.git

1、预安装 gcc make linux-headers-`uname -r`

我的ubuntu是 uname -r 是 5.4.0-171-generic ,我选择最近的下载版本 5.4.0-128.144

2、下载源码TCP_option_address后, 解压,cd src 进入 ,make 编译如果未提示错误则编译成功,检查当前目录下是否已经生成toa.ko文件。

3、加载内核
insmod toa.ko
dmesg |grep TOA

4、自启动加载

Ubuntu 在 /etc/modules-load.d/toa.conf 下建立 ,文件直接写 模块名字 toa
拷贝toa.ko 文件到 /lib/modules/$(uname -r)/ ,运行depmod -a 更新内核模块依赖关系

参考连接https://ecloud.10086.cn/op-help-center/doc/article/29108

firewall 的这么多zone的优先级

zone 介绍

firewall的zone有 block dmz docker drop external home internal public trusted work等,除此之外,还有自定义的zone。每个zone就是一套规则集。

多个活动zone下的流量匹配优先级顺序

有那么多zone,对于一个具体的请求来说应该使用哪个zone(哪套规则)来处理呢?这个问题至关重要,如果这点不弄明白其他的都是空中楼阁,即使规则设置的再好,不知道怎样用、在哪里用也不行。

对于一个接受到的请求具体使用哪个zone,firewalld是通过三种方法来判断的:

1、source,也就是源地址

2、interface,接收请求的网卡

3、firewalld.conf中配置的默认zone

4、默认规则,丢弃

这三个的优先级按顺序依次降低,也就是说如果按照source可以找到就不会再按interface去查找,如果前两个都找不到才会使用第三个,也就是在firewalld.conf中配置的默认zone

这里做下特别说明:

假设某个来源IP访问匹配了 某个定义了source的zone,它接着在zone中找service或port是否有匹配的规则设置,如果有则按照zone 中的targe设置来决定是否放行。没有匹配的就找第二个优先级的zone去查找service 或port 规则

target 有(default , accept ,drop ,%%REJECT%%)几种

相关命令说明

#列出本机所有zone
firewall-cmd --get-zones
#列出默认zone
firewall-cmd --get-default-zone
#设置默认zone
firewall-cmd --set-default-zone
#列出活动的zone,可以有多个
firewall-cmd --get-active-zones
#显示默认zone的所有配置信息(Permanent)
firewall-cmd --list-all