服务器内部可以访问外部网络,docker内部无法访问外部网络,只能docker内部访问
要通过 iptables
将容器中的特定端口请求转发到特定服务器,你需要设置 DNAT
(目标地址转换)规则。以下是详细步骤:
假设场景
- 容器端口:
8080
(容器内服务监听的端口) - 目标服务器:
192.168.1.100
(请求需要转发到的服务器) - 目标服务器端口:
80
(转发到目标服务器的端口) - 宿主机IP:
192.168.1.1
(运行容器的宿主机IP) - 容器网络模式: 假设为
bridge
模式(常见默认模式)
步骤 1:启用 IP 转发
确保 Linux 内核启用了 IP 转发:
echo 1 > /proc/sys/net/ipv4/ip_forward
sysctl -w net.ipv4.ip_forward=1
永久生效需修改 /etc/sysctl.conf
:
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
步骤 2:添加 iptables 规则
1. DNAT 规则(修改目标地址和端口)
将宿主机 8080
端口的请求转发到目标服务器 192.168.1.100:80
:
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
2. 允许流量通过 FORWARD 链
确保转发流量不被默认策略拒绝:
iptables -A FORWARD -p tcp -d 192.168.1.100 --dport 80 -j ACCEPT
3. MASQUERADE 规则(可选,解决回包问题)
如果目标服务器需要将响应包返回给容器,需启用源地址伪装(适用于桥接网络或 NAT 环境):
iptables -t nat -A POSTROUTING -j MASQUERADE
步骤 3:保存规则(根据系统选择)
-
Debian/Ubuntu:
iptables-save > /etc/iptables/rules.v4
-
RHEL/CentOS:
service iptables save
验证规则
-
查看 NAT 表规则:
iptables -t nat -L -n -v
-
测试端口转发:
curl http://宿主机IP:8080
应返回目标服务器
192.168.1.100:80
的内容。
注意事项
- 容器网络模式:
- 如果容器使用
host
网络模式,宿主机端口直接暴露给容器,无需额外转发。 - 如果容器使用自定义网络,需确保
iptables
规则匹配容器的网络接口(如docker0
)。
- 如果容器使用
- 防火墙冲突:
- 如果宿主机启用了
firewalld
或ufw
,需放行相关端口或停用冲突服务。
- 如果宿主机启用了
- 目标服务器路由:
- 确保目标服务器的默认网关能正确返回数据包到宿主机(或启用 MASQUERADE)。
完整示例
将所有访问宿主机 8080
端口的请求转发到 192.168.1.100:80
:
# 启用转发
sysctl -w net.ipv4.ip_forward=1# 添加 DNAT 规则
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80# 允许转发流量
iptables -A FORWARD -p tcp -d 192.168.1.100 --dport 80 -j ACCEPT# 启用源地址伪装
iptables -t nat -A POSTROUTING -j MASQUERADE# 保存规则(Debian/Ubuntu)
iptables-save > /etc/iptables/rules.v4
通过以上步骤,容器内或外部访问宿主机 8080
端口的请求将被透明转发到 192.168.1.100:80
。
配置之后的代码显示
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:13206 to:38.59.178.104:13206Chain INPUT (policy ACCEPT)
target prot opt source destination Chain OUTPUT (policy ACCEPT)
target prot opt source destination Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
KUBE-POSTROUTING all -- 0.0.0.0/0 0.0.0.0/0 /* kubernetes postrouting rules */
MASQUERADE all -- 0.0.0.0/0 0.0.0.0/0 Chain KUBE-KUBELET-CANARY (0 references)
target prot opt source destination Chain KUBE-MARK-DROP (0 references)
target prot opt source destination
MARK all -- 0.0.0.0/0 0.0.0.0/0 MARK or 0x8000Chain KUBE-MARK-MASQ (0 references)
target prot opt source destination
MARK all -- 0.0.0.0/0 0.0.0.0/0 MARK or 0x4000Chain KUBE-POSTROUTING (1 references)
target prot opt source destination
RETURN all -- 0.0.0.0/0 0.0.0.0/0 mark match ! 0x4000/0x4000
MARK all -- 0.0.0.0/0 0.0.0.0/0 MARK xor 0x4000
MASQUERADE all -- 0.0.0.0/0 0.0.0.0/0 /* kubernetes service traffic requiring SNAT */ random-fully
相关文章:

服务器内部可以访问外部网络,docker内部无法访问外部网络,只能docker内部访问
要通过 iptables 将容器中的特定端口请求转发到特定服务器,你需要设置 DNAT(目标地址转换)规则。以下是详细步骤: 假设场景 容器端口: 8080(容器内服务监听的端口)目标服务器: 192.168.1.100(请…...
机器学习中的特征工程:解锁模型性能的关键
在机器学习领域,模型的性能往往取决于数据的质量和特征的有效性。尽管深度学习模型在某些任务中能够自动提取特征,但在大多数传统机器学习任务中,特征工程仍然是提升模型性能的关键环节。本文将深入探讨特征工程的重要性、常用方法以及在实际…...
JAVA:Spring Boot 集成 RDF4J 实现欺诈检测的技术指南
1、简述 在大数据、知识图谱和金融风控等领域,RDF(Resource Description Framework) 是一种用于表示和查询关联数据的强大工具。RDF4J 是一个流行的 Java 库,用于操作 RDF 数据集,并支持 SPARQL 查询,能够帮助我们进行复杂的欺诈检测。 项目的核心功能: RDF 数据存储:…...
spring boot 注解
spring boot 注解 spring 会把被注解Controller、Service、Repository、Component 标注的类 纳入Spring容器中进行管理。 第7章会讲解 IoC 容器。 Controller。 它用于标注控制器层,在MVC 开发模式中代表C(控制器)。 Model View Controller Controlle…...
Spring框架的事务管理
配置文件的方式 <!--第二种写法:使用提供标签的方式--> <context:property-placeholder location"classpath:jd.properties"/><!--加载属性的文件(使用开源连接池)--> <bean id"dataSource" class"com.a…...
Spring MVC 中请求处理流程及核心组件解析
在 Spring MVC 中,请求从客户端发送到服务器后,需要经过一系列组件的处理才能最终到达具体的 Controller 方法。这个过程涉及多个核心组件和复杂的映射机制,下面详细解析其工作流程: 1. 核心组件与请求流程 Spring MVC 的请求处…...

PCIe Switch 问题点
系列文章目录 文章目录 系列文章目录完善PCIe Retimer Overview Document OutlineSwitch 维度BroadComMicroChipAsmedia 祥硕Cyan其他 完善 Functional block diagram,功能框图Key Features and Benefits,主要功能和优点Fabric 链路Multi-root PCIe Re…...

开源轻量级地图解决方案leaflet
Leaflet 地图:开源轻量级地图解决方案 Leaflet 是一个开源的 JavaScript 库,用于在网页中嵌入交互式地图。它以轻量级、灵活性和易用性著称,适用于需要快速集成地图功能的项目。以下是关于 Leaflet 的详细介绍和使用指南。 1. Leaflet 的核心…...

Flutter目录结构介绍、入口、Widget、Center组件、Text组件、MaterialApp组件、Scaffold组件
目录 1. 创建Flutter项目 1.1使用Android Studio创建Flutter项目 1.2 使用命令行创建Flutter项目 2. Flutter项目介绍 2.1所有代码都在lib目录下编写 2.1 pubspec.yaml 依赖库/图片的引用 编辑 3. 运行项目 4. 编写mian.dart文件 4.1 使用MaterialApp 和 Scaffold两个组件…...

如何实现金蝶云星空到MySQL的数据高效集成
金蝶云星空数据集成到MySQL的技术案例分享 在企业信息化建设中,数据的高效流动和准确处理是关键。本文将聚焦于一个具体的系统对接集成案例:金蝶云星空的数据集成到MySQL,方案名称为“xsck-2金蝶销售出库-->mysql”。通过这一案例&#x…...
Web性能优化的未来:边缘计算、AI与新型渲染架构
一、边缘计算与性能优化深度整合 1.1 边缘节点计算卸载策略 • 智能任务分割:将非关键路径计算卸载到边缘节点 // 客户端代码 const edgeTask = new EdgeTask(image-processing); edgeTask.postMessage(imageData, {transfer...

院校机试刷题第四天:1911反转公约数、1702十六进制不进位加法
一、1911反转公约数 1.题目描述 2.解题思路 两个关键点:1.如何把数字反转,2.如何求最大公约数。 反转:用字符串形式存储,定义一个新的字符串倒序存储反转之后的字符串,将字符串按位转换位数字。 求最大公约数&…...
java输入输出类
父类 子类--->System.in(实例类) InputStream(抽象类,所有输入流的父类)|--->FileInputStream---->System.out(实例类) OutpustStream(抽象类,所有输出流的父类)|----> FileOutputStream----&…...

Redis解析
Redis解析 一、单线程模型 redis在io层面是多线程的,在数据处理层面是单线程的。 多线程一般用于: 关闭连接删除/淘汰内存网络IO 1.1 io多路复用 redis使用nio(select、poll、epoll)的方式处理socket 主线程负责接收建立连接…...
golang -- 认识channel底层结构
channel channel是golang中用来实现多个goroutine通信的管道(goroutine之间的通信机制),底层是一个叫做hchan的结构体,定义在runtime包中 type hchan struct {qcount uint // 循环数组中的元素个数(通道…...

2025年Ai写PPT工具推荐,这5款Ai工具可以一键生成专业PPT
上个月给客户做产品宣讲时,我对着空白 PPT 页面熬到凌晨一点,光是调整文字排版就改了十几版,最后还是被吐槽 "内容零散没重点"。后来同事分享了几款 ai 写 PPT 工具,试完发现简直打开了新世界的大门 —— 不用手动写大纲…...
对称二叉树的判定:双端队列的精妙应用
一、题目解析 题目描述 给定一个二叉树,检查它是否是镜像对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的: 1/ \2 2/ \ / \ 3 4 4 3而 [1,2,2,null,3,null,3] 则不是镜像对称的: 1/ \2 2\ \3 3问题本质 判断一棵二叉…...
使用Python实现简单的人工智能聊天机器人
最近研学过程中发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击链接跳转到网站人工智能及编程语言学习教程。读者们可以通过里面的文章详细了解一下人工智能及其编程等教程和学习方法。下面开始对正文内容的…...
React 播客专栏 Vol.11|Plain CSS 如何在 React 中优雅登场?
👋 欢迎回到《前端达人 React 播客书单》第 11 期(正文内容为学习笔记摘要,音频内容是详细的解读,方便你理解),请点击下方收听 今天我们进入前端样式化的第一课,用最传统的方式 —— Plain CSS…...

css:倒影倾斜效果
这是需要实现的效果,平时用的比较多的是添加阴影,是box-shadow,而添加倒影是box-reflect,需要注意的是box-reflect需要添加浏览器前缀,比如我用的谷歌浏览器,要加-webkit-才能生效。 -webkit-box-reflect:…...
spring学习->sprintboot
spring IoC(控制翻转): 控制:资源的控制权(资源的创建,获取,销毁等) 反转:和传统方式不一样(用上面new什么),不用new让ioc来发现你用什么,然后我来给什么 DI:(依赖注入) 依赖:组件的依赖关系。如newsController依赖NewsServi…...

语音识别——通过PyAudio录入音频
PyAudio 是一个用于处理音频的 Python 库,它提供了录制和播放音频的功能。通过 PyAudio,可以轻松地从麦克风或其他音频输入设备录制音频,并将其保存为文件或进行进一步处理。 安装 PyAudio 在使用 PyAudio 之前,需要先安装它。可…...

五月月报丨MaxKB在教育行业的应用进展与典型场景
在2025年的3月和4月的“用户应用月度报告”中,MaxKB开源项目组相继总结了MaxKB开源项目在政府、公共事业、教育、医疗以及企事业单位的应用情况。毫无疑问,在DeepSeek等国产大模型被各行各业的用户广泛接受之后,AI应用建设并运营的步伐也在显…...
算法练习:JZ51 数组中的逆序对
分析: 题干两个坑: 数组长度最大 1 0 5 10^5 105; P的值可能超过整型数据范围; 作为归并排序的变式。 为什么能用归并排序找到逆序对?因为归并排序的重组步骤中,左数组与右数组是有序的,对…...

【流程控制结构】
流程控制结构 流程控制结构1、顺序结构2、选择结构if基本选择结构if else语法多重if语法嵌套if语法switch选择结构 3、循环结构循环结构while循环结构程序调试for循环跳转语句区别 流程控制结构 1、顺序结构 流程图 优先级 2、选择结构 if基本选择结构 单if 语法 if&…...
掌握 Kotlin Android 单元测试:MockK 框架深度实践指南
掌握 Kotlin Android 单元测试:MockK 框架深度实践指南 在 Android 开发中,单元测试是保障代码质量的核心手段。但面对复杂的依赖关系和 Kotlin 语言特性,传统 Mock 框架常显得力不从心。本文将带你深入 MockK —— 一款专为 Kotlin 设计的 …...
嵌入式故障码管理系统设计实现
文章目录 前言一、故障码管理系统概述二、核心数据结构设计2.1 故障严重等级定义2.2 模块 ID 定义2.3 故障代码结构2.4 故障记录结构 三、故障管理核心功能实现3.1 初始化功能3.2 故障记录功能3.3 记录查询与清除功能3.4 系统自检功能 四、故障存储实现4.1 Flash 存储实现4.2 R…...

PowerBI基础
一、前言 在当今数据驱动的时代,如何高效地整理、分析并呈现数据,已成为企业和个人提升决策质量的关键能力。Power BI 作为微软推出的强大商业智能工具,正帮助全球用户将海量数据转化为直观、动态的可视化洞察。数据的世界充满可能性…...

一文了解多模态大模型LLaVA与LLaMA的概念
目录 一、引言 二、LLaVA与LLaMA的定义 2.1 LLaMA 2.2 LLaVA 2.3 LLaVA-NeXT 的技术突破 三、产生的背景 3.1 LLaMA的背景 3.2 LLaVA的背景 四、与其他竞品的对比 4.1 LLaMA的竞品 4.2 LLaVA的竞品 五、应用场景 5.1 LLaMA的应用场景 5.2 LLaVA的应用场景 六…...
E-R图合并时的三种冲突
属性冲突 属性冲突指的是在合并两个实体时,相同属性的数据类型、取值范围或约束条件不一致。例如,一个实体中的“年龄”属性定义为整数类型,而另一个实体中的“年龄”属性定义为字符串类型,这就产生了属性冲突。 命名冲突 命名…...