负载均衡器 OpenELB ARP 欺骗技术解析
作者:大飞哥,视源电子运维工程师,KubeSphere 用户委员会广州站站长,KubeSphere Ambassador。
K8S 对集群外暴露服务有三种方式:NodePort,Ingress 和 Loadbalancer。NodePort 用于暴露 TCP 服务(4 层),但限于对集群节点主机端口的占用,不适合大规模使用;Ingress 用于暴露 HTTP 服务(7 层),可对域名地址做路由分发;Loadbalancer 则专属于云服务,可动态分配公网网关。
对于私有云集群,没有用到公有云服务,能否使用 LoadBalancer 对外暴露服务呢?
答案当然是肯定的,OpenELB 正是为裸金属服务器提供 LoadBalancer 服务而生的!
应用安装与配置
安装 OpenELB
参考官方安装文档
$ kubectl apply -f https://raw.githubusercontent.com/openelb/openelb/master/deploy/openelb.yaml
添加 EIP 池
EIP 地址要与集群主机节点在同一网段内,且不可绑定任何网卡;
apiVersion: network.kubesphere.io/v1alpha2
kind: Eip
metadata:
name: eip-sample-pool
annotations:
eip.openelb.kubesphere.io/is-default-eip: "true"
spec:
address: 192.168.0.91-192.168.0.100
protocol: layer2
interface: eth0
disable: false
配置 Service 为 LoadBalancer
把 Service 类型修改为 LoadBalancer,同时 annotations 中添加如下三行:
lb.kubesphere.io/v1alpha1: openelb
protocol.openelb.kubesphere.io/v1alpha1: layer2
eip.openelb.kubesphere.io/v1alpha2: layer2-eip
总体配置清单如下:
kind: Service
apiVersion: v1
metadata:
name: layer2-svc
annotations:
lb.kubesphere.io/v1alpha1: openelb
protocol.openelb.kubesphere.io/v1alpha1: layer2
eip.openelb.kubesphere.io/v1alpha2: layer2-eip
spec:
selector:
app: layer2-openelb
type: LoadBalancer
ports:
- name: http
port: 80
targetPort: 8080
externalTrafficPolicy: Cluster
Layer2 模式中的黑客技术

ARP 欺骗技术: 应用程序主动回复路由器 ARP 请求,让路由器以为该应用是合法终端,从而劫持网络流量包。
OpenELB 正是利用 ARP 欺骗技术,从而获取路由器流量,再由 kube-proxy 将流量转发到 Service 网络。OpenELB Layer2 模式需要配置 EIP,如上图所示的 EIP 为 192.168.0.91。
当请求 EIP 地址时,路由器会在局域网内发起 ARP 协议广播,哪个终端设备响应,就把数据包发送给谁;配置 EIP 时有要求,EIP 地址不能绑定任何网卡,也就是说正常情况下,不会有任何物理硬件设备响应。此时的 OpenELB,就趁虚而入,捕获到 ARP 广播信息后,对路由器广播进行响应,把自己伪装成终端设备。OpenELB 获得流量后,再经由 kube-proxy 转发入 Service 网络。
可以在其中一台 Node 上面抓包看一下:
$ tcpdump -i any arp -nn -vvv | grep 192.168.0.91
17:33:01.398722 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 192.168.0.91 (ff:ff:ff:ff:ff:ff) tell 192.168.0.91, length 46
17:33:01.398793 ARP, Ethernet (len 6), IPv4 (len 4), Reply 192.168.0.91 is-at 52:54:22:3a:e6:6e, length 46
路由器的 ARP 缓存每过一段时间就会失效,重新发起 ARP 协议广播,使用 tcpdump 一直监听就可以抓到相关的数据包。可以看到 OpenELB 响应的 MAC 地址是 Kubernetes 的其中一台节点的 MAC 地址。
改善与建议
OpenELB Layer2 模式因其实现简单,而且对物理硬件和网络没有额外要求,所以实际生产中经常会用到。但目前仍存在单点故障风险,即如果 OpenELB 实例因资源不足故障,则整个对外流量将中断。
万幸的是 OpenELB 官方已有新的解决方案,即 Layer2 VIP 模式,该模式的使用方式可以参考官方文档。有时间我会再写一篇 Layer2 VIP 模式的详细使用方案,敬请期待。
本文由博客一文多发平台 OpenWrite 发布!
负载均衡器 OpenELB ARP 欺骗技术解析的更多相关文章
- 浮动IP地址(Float IP)与 ARP欺骗技术
浮动IP地址: 一个网卡是可以添加多个IP的. 就是多个主机工作在 同一个集群中,即两台主机以上.每台机器除了自己的实IP外,会设置一个浮动IP,浮动IP与主机的服务(HTTP服务/邮箱服务)绑在一起 ...
- arp欺骗技术
ARP欺骗技术-获取内网目标IP访问图片! 简介: ARP(Address Resolution Protocol,地址解析协议)是一个位于TCP/IP协议栈中的网络层,负责将某个IP地址解析 ...
- 防止ARP欺骗
前言: 曾经因为宿舍里面的同学经常熬夜打游戏,好言相劝不管用,无奈之下使用arp欺骗他们的主机,使之晚上11点之后游戏延迟,掉线,最后,一到11点同学们就都上床睡觉了. 防止arp欺骗的三种思路: 在 ...
- 网络层主要协议与arp欺骗
网络层主要协议与arp欺骗 目录 网络层主要协议与arp欺骗 一.网络层(Network Layer) 1.网络层的功能 2.IP数据报(IP Datagram) 二.网络层的主要协议 1.ICMP协 ...
- kali Linux 渗透测试 | ettercap图形界面(ARP 欺骗 + DNS欺骗)
上次我们使用 arpspoof 工具在命令行中完成了 arp 欺骗实验,今天我们用另一种工具 ettercap 工具来实现.ettercap支持图形化操作,对新手非常友好,并且操作非常简单, ette ...
- 使用ARP欺骗, 截取局域网中任意一台机器的网页请求,破解用户名密码等信息
ARP欺骗的作用 当你在网吧玩,发现有人玩LOL大吵大闹, 用ARP欺骗把他踢下线吧 当你在咖啡厅看上某一个看书的妹纸,又不好意思开口要微信号, 用arp欺骗,不知不觉获取到她的微信号和聊天记录,吓一 ...
- Python黑客编程ARP欺骗
Python灰帽编程 3.1 ARP欺骗 ARP欺骗是一种在局域网中常用的攻击手段,目的是让局域网中指定的(或全部)的目标机器的数据包都通过攻击者主机进行转发,是实现中间人攻击的常用手段,从而实现数据 ...
- 防止ARP欺骗的方法!!!
防止ARP欺骗的方法!!! 根据鄙人上网经常掉线,怀疑可能是某人使用网络剪刀手,网络执行官,局域网终结者等工具.经过搜索有关资料,有了一点点防范经验,借以参考~! 一 首先我们来了解下这类攻击工具的原 ...
- ARP欺骗与中间人攻击
前言: 上一篇WPA/WAP2wifi 密码破解笔记说到如何探测附近开放的AP并且破解进入,那么进入别人据局域网我们能干些什么呢?换句话说如果别人进入了我们内部网络,会有什么影响?本文简要介绍了ARP ...
- 关于ARP欺骗与MITM(中间人攻击)的一些笔记( 二 )
一直没有折腾啥东西,直到最近kali Linux发布,才回想起应该更新博客了….. 再次说明,这些技术并不是本人原创的,而是以前记录在Evernote的旧内容(排版不是很好,请谅解),本文是继关于AR ...
随机推荐
- 区块链共识机制 —— PoW共识的Python实现
原始实现(python2 版本) https://github.com/santisiri/proof-of-work 依据python3特性改进后: #!/usr/bin/env python # ...
- 低端hdmi视频采集卡的替代方案——向日葵远控
前一阵看直播推货入手了一款hdmi视频采集卡,如下: ======================================================= 使用这个视频采集卡发现两个问题: ...
- Sentry 开源版与商业 SaaS 版的区别
您会在官方的文档中找到大量对 sentry 和 getsentry 的引用.两者都是 Django 应用程序,但 sentry 是开源的, getsentry 是闭源的.里面有什么? https:// ...
- Ambiguous Mapping 的处理方法
出现原因:两个不同的Controller 中出现相同映射路径 eg: AController:/v1/wdnmd/userList/list BController:/v1/wdnmd/userLis ...
- 零基础学习人工智能—Python—Pytorch学习(四)
前言 接续上一篇的optimizer的学习. optimizer 代码和上一篇文章的一样,如下: import torch import numpy as np import torch.nn as ...
- 这就是为什么你学不会DDD
本文书接上回<为了给Javaer落地DDD,我们不得不写开源组件>,欢迎关注公众号(老肖想当外语大佬),获取最新文章更新和DDD框架源码,视频和直播在B站. https://mp.weix ...
- Linux基础优化与常用软件包说明
1.安装常用工具 1.1CentOS(7) 1.1.1 是否联网 ping qq.com 1.1.2 配置yum源(安装软件的软件仓库) 默认情况下yum下载软件的时候是从随机地址下载. 配置yum从 ...
- armbian指令大全
修复缺失内容 使用以下命令修复安装时缺失的内容: sudo apt --fix-broken install 使用 aptitude 安装软件 aptitude 是 Debian 及其衍生系统中功能强 ...
- 电商API接口应该如何使用?
从定义上看,API接口是指预先定义的一组规则和协议,允许不同的软件应用之间相互通信和交换数据. 目前,市场中电商行业用到API接口的场景较多,电商API接口则是专门针对电子商务应用场景所提供的API, ...
- 使用 nuxi clean 命令清理 Nuxt 项目
title: 使用 nuxi clean 命令清理 Nuxt 项目 date: 2024/9/1 updated: 2024/9/1 author: cmdragon excerpt: nuxi cl ...