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

IPTABLES问题:DNAT下如何解决内网访问内部服务器问题

这个问题,困扰了我几年了,今天终于得到解决。

问题是这样的,在局域网内部有一台服务器,通过IPTABLES的网关提供对外服务,做过IPTABLES网关的人都知道,这很容易做到,只要在网关机器上写一个DNAT的地址转换即可。但是如果是内部机器去访问网关的外部地址,则访问不了了,解决之道是:内网的机器,要么在内部建立一个DNS服务器为那太服务器提供DNS解析,要么在要访问的机器上设置hosts。但这两个解决方法都没涉及到IPTABLES,不是根本的解决之道。有的时候这种解决之道还不一定能实现实际需求。

要解决这个问题,首先要分析为何在内网访问不了?

首先你可能在网关上做了一个DNAT

   iptables -t nat  -A PREROUTING   -d $InternetIp   -p tcp  --dport 8000 -j  DNAT --to-destination 192.168.0.13:80

也就是访问网关的$InternetIp地址的时候会转换地址到192.168.0.13

现在,当一台局域网内的机器(如192.168.0.51)访问 $InternetIp的8000端口时,网关机器发现应该转换到192.168.0.13的80端口。服务器192.168.0.13接收到该请求时,发现请求的机器来自局域网内(192.168.0.51),因此就直接发送响应给局域网内机器(192.168.0.51).问题就在了,局域网内的机器是把请求发送给网关的$InternetIp地址,并没有发送给内部服务器(192.168.0.13),所以这个包是不期望的,会把它丢掉。

那到底该怎么做呢?那台内部机器(192.168.0.51)如果得到从网关的响应包,那局域网内部机器(192.168.0.51)就会认为这个包是它应该得到的响应包了(因为是发送给网关的)

所以只要在网关机器上再做一个SNAT就解决了,请看下面的:

iptables -t nat -A POSTROUTING -d 192.168.0.13 -s 192.168.0.0/24 -p tcp --dport 80 -j SNAT  --to-source 192.168.0.1

http://www.lryc.cn/news/234392.html

相关文章:

  • 异步任务线程池——最优雅的方式创建异步任务
  • uniapp 跨页面传值及跨页面方法调用
  • 无线物理层安全大作业
  • 目标检测标注工具AutoDistill
  • 关于SPJ表的数据库作业
  • 【Nacos】配置管理、微服务配置拉取、实现配置热更新、多环境配置
  • HTML5学习系列之网页图像
  • go语言学习之旅之Go语言数据类型
  • Day49 力扣单调栈 : 739. 每日温度 |496.下一个更大元素 I
  • 实用篇-ES-RestClient查询文档
  • 2023年第九届数维杯国际大学生数学建模挑战赛
  • TensorRT基础知识及应用【学习笔记(十)】
  • [内存泄漏][PyTorch](create_graph=True)
  • 【Git学习二】时光回溯:git reset和git checkout命令详解
  • 多维时序 | MATLAB实现PSO-GRU-Attention粒子群优化门控循环单元融合注意力机制的多变量时间序列预测
  • MySQL缓冲池的优化与性能提升
  • 一些RLHF的平替汇总
  • 7.docker部署前端vue项目,实现反向代理配置
  • 字符串函数详解
  • Mybatis学习笔记-映射文件,标签,插件
  • 【C++】模板初阶 【 深入浅出理解 模板 】
  • 无需API开发,伯俊科技实现电商与客服系统的无缝集成
  • Python | 机器学习之逻辑回归
  • 手机,蓝牙开发板,TTL/USB模块,电脑四者之间的通讯
  • Springboot更新用户头像
  • Express.js 与 Nest.js对比
  • 总结 CNN 模型:将焦点转移到基于注意力的架构
  • 2023.11.16 hivesql高阶函数之开窗函数
  • QTableWidget常用信号的功能
  • Vue理解01