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

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

相关文章:

  • Qt功能区:Ribbon使用
  • mathematics-2024《Graph Convolutional Network for Image Restoration: A Survey》
  • OpenCV阈值处理完全指南:从基础到高级应用
  • 八股文--JUC(2)
  • 突发,苹果发布下一代 CarPlay Ultra
  • makefile细节说明
  • 图像锐化调整
  • AI最新资讯,GPT4.1加入网页端、Claude 3.7 Sonnet携“极限推理”发布在即
  • 有什么软件系统可以高效管理工地现场物资材料?
  • 【SpringBoot】从零开始全面解析SpringMVC (二)
  • 如何查询Ubuntu系统中最大的几个目录以G单位显示大小,从大到小排列?
  • Go的单测gomock及覆盖率命令
  • 【HTML5学习笔记2】html标签(下)
  • 《数据结构初阶》【二叉树 精选9道OJ练习】
  • 地球系统模式(CESM)实践技术应用
  • 【MySQL】数据库三大范式
  • GpuGeek 实操指南:So-VITS-SVC 语音合成与 Stable Diffusion 文生图双模型搭建,融合即梦 AI 的深度实践
  • Android framework 中间件开发(二)
  • 当 PyIceberg 和 DuckDB 遇见 AWS S3 Tables:打造 Serverless 数据湖“开源梦幻组合”
  • git管理忽略指定路径/临时文件
  • 首次公布!我国空间站内发现微生物新物种
  • 广西壮族自治区党委常委会:坚决拥护党中央对蓝天立进行审查调查的决定
  • 跨越三十年友情,61岁余隆和60岁齐默尔曼在上海再度合作
  • 韩正会见美国景顺集团董事会主席瓦格纳
  • 蒋圣龙突遭伤病出战世预赛存疑,国足生死战后防线严重减员
  • 董军在第六届联合国维和部长级会议上作大会发言