当前位置: 首页 > ai >正文

服务器内部可以访问外部网络,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
    

验证规则

  1. 查看 NAT 表规则:

    iptables -t nat -L -n -v
    
  2. 测试端口转发:

    curl http://宿主机IP:8080
    

    应返回目标服务器 192.168.1.100:80 的内容。


注意事项

  1. 容器网络模式
    • 如果容器使用 host 网络模式,宿主机端口直接暴露给容器,无需额外转发。
    • 如果容器使用自定义网络,需确保 iptables 规则匹配容器的网络接口(如 docker0)。
  2. 防火墙冲突
    • 如果宿主机启用了 firewalldufw,需放行相关端口或停用冲突服务。
  3. 目标服务器路由
    • 确保目标服务器的默认网关能正确返回数据包到宿主机(或启用 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
http://www.xdnf.cn/news/6514.html

相关文章:

  • 网络安全-等级保护(等保) 2-6 GB/T 36958—2018 《信息安全技术 网络安全等级保护安全管理中心技术要求》-2018-12-28 发布【现行】
  • Spark,数据清洗
  • k8s部署实战-springboot应用部署
  • 技术融资:概念与形式、步骤与案例、挑战与应对、发展趋势
  • python打卡训练营Day27
  • 爬虫基础之抓包工具的使用
  • Spring Boot循环依赖的陷阱与解决方案:如何打破“Bean创建死循环”?
  • (面试)Android各版本新特性
  • Oracle学习日记--Oracle中使用单个inert语句实现插入多行记录
  • 支付宝小程序关键词排名优化中的常见错误
  • Linux下载与安装
  • leetcode:58. 最后一个单词的长度(python3解法)
  • SearchClassUtil
  • 102. 二叉树的层序遍历
  • “光伏+储能+智能调控”,CET中电技术分布式智能微网方案如何实现?
  • 多线程(四)
  • 云服务器的运用自如
  • 数学复习笔记 14
  • [CSS3]属性增强1
  • 回调函数应用示例
  • 网络安全-等级保护(等保) 2-5-1 GB/T 25070—2019 附录B (资料性附录)第三级系统安全保护环境设计示例
  • IEC 60601-2-16:2025 标准解析
  • python打卡day27
  • TCP/IP 知识体系
  • 国标GB/T 12536-90滑行试验全解析:纯电动轻卡行驶阻力模型参数精准标定
  • 【AI大模型学习路线】第二阶段之RAG基础与架构——第七章(【项目实战】基于RAG的PDF文档助手)query搜索与文档排序?
  • win10-django项目与mysql的基本增删改查
  • 从代码学习深度学习 - 实战Kaggle比赛:狗的品种识别(ImageNet Dogs)PyTorch版
  • 关于nginx浏览器访问.php直接被当做文件下载相关问题
  • Github 2025-05-16 Java开源项目日报 Top9