java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > java.net.UnknownHostException 问题

解决java.net.UnknownHostException 问题小结

作者:奈-chann

本文主要介绍了解决java.net.UnknownHostException 问题小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、故障现象描述

环境信息

报错信息

Java 控制台抛出:

java.net.UnknownHostException: api.weixin.qq.com: 域名解析暂时失败

测试现象

  1. 执行 nslookup api.weixin.qq.com
    connection timed out; no servers could be reached
  2. Ping 公网 DNS(如 119.29.29.29)无回显
  3. 跳板机访问外网正常

二、核心原因分析

查看路由表(ip route)发现:
内网服务器默认网关指向跳板机:

default via 192.168.2.202 dev enp2s0f1

故障根源

  1. 链路中断
    内网服务器将数据包转发至跳板机,但跳板机未开启地址伪装(MASQUERADE/SNAT)
  2. IP 无法回程
    外网服务器收到内网私有 IP 请求包,无回程路由,无法响应。
  3. 规则失效
    原有转发规则在修改 iptables 或系统重启后被覆盖/丢失。

三、解决方案:开启 NAT 地址转换

步骤一:开启跳板机内核转发功能

允许 Linux 系统转发数据包。

# 尝试执行
sysctl net.ipv4.ip_forward
# 返回结果不为1 临时开启
sysctl -w net.ipv4.ip_forward=1
# 永久开启
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p

步骤二:配置 iptables 出口 NAT 规则

方案 A:允许整个内网网段上网(推荐)

# -s 指定内网网段,-o 指定公网网卡
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eno4 -j MASQUERADE

方案 B:仅允许指定服务器上网(精细化控制)

# 仅允许 192.168.2.199 访问外网
iptables -t nat -A POSTROUTING -s 192.168.2.199/32 -o eno4 -j MASQUERADE

步骤三:持久化 iptables 规则

防止重启失效。

# CentOS / RHEL
iptables-save > /etc/sysconfig/iptables
# Ubuntu / Debian
iptables-save > /etc/iptables/rules.v4

四、技术知识点科普

CIDR 子网说明

MASQUERADE(地址伪装)

动态 SNAT,将内网源 IP 临时替换为跳板机公网 IP,使外网回包能正常返回跳板机,再转发至内网服务器。

五、验证结果

  1. 内网服务器执行 ping 114.114.114.114 —— 网络连通
  2. 内网服务器执行 nslookup api.weixin.qq.com —— 域名解析正常
  3. 重启 Java 应用,业务功能恢复正常

到此这篇关于解决java.net.UnknownHostException 问题小结的文章就介绍到这了,更多相关java.net.UnknownHostException 问题内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文