You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

局域网内TCP通信正常,VPN远程连接服务器时TCP连接失败求助

TCP远程连接(VPN)故障排查

问题现象

处于服务器所在局域网时,使用本地IP(192.168.1.50)通过TCP发送数据包可正常运行;但通过VPN远程连接时,使用DNS解析获取的服务器IP进行TCP连接,在socket.Connect(destino);处报错,错误信息:

连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机未能响应 88.23.154.89:1025

局域网正常运行代码

// 创建Socket
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// 定义目标IP和端口
IPAddress ip = IPAddress.Parse("192.168.1.50");
int puerto = 8888;
// 指定消息发送目标
IPEndPoint destino = new IPEndPoint(ip, puerto);

try
{
    // 建立连接
    socket.Connect(destino);

    // 创建消息
    byte[] mensaje = Encoding.ASCII.GetBytes("shutdown");

    // 发送消息
    var result = socket.Send(mensaje);
}
catch (Exception ex)
{
    throw ex;
}
finally
{
    socket.Close();
}

VPN远程连接报错代码

// 创建Socket
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
// 定义目标IP和端口
IPAddress ip = Dns.GetHostAddresses("google.com")[0]; // 示例返回IP:88.23.154.89
int puerto = Convert.ToInt32(ConfigurationManager.AppSettings["PUERTO_SERVIDOR"]);
// 指定消息发送目标
IPEndPoint destino = new IPEndPoint(ip, puerto);

try
{
    // 建立连接(此处报错)
    socket.Connect(destino);

    // 创建消息
    byte[] mensaje = Encoding.ASCII.GetBytes("shutdown");

    // 发送消息
    var result = socket.Send(mensaje);
}
catch (Exception ex)
{
    throw ex;
}
finally
{
    socket.Close();
}

排查与解决建议

  • 修正DNS解析目标:代码中示例用了google.com,实际必须替换为你的服务器对应的域名,否则解析的是无关IP,必然无法连接。
  • 过滤IPv4地址:Dns.GetHostAddresses可能返回IPv6地址,导致连接失败,建议只取IPv4地址:
    IPAddress ip = Dns.GetHostAddresses("你的服务器域名")
        .FirstOrDefault(ip => ip.AddressFamily == AddressFamily.InterNetwork);
    if (ip == null)
    {
        throw new Exception("未找到可用的IPv4地址");
    }
    
  • 检查服务器监听配置:确保服务器的Socket监听绑定的是0.0.0.0(所有网卡),而不是仅局域网IP192.168.1.50,否则远程IP无法访问。
  • 验证端口与防火墙:
    • 确认远程连接使用的端口(配置文件中的PUERTO_SERVIDOR)与服务器监听端口一致,且服务器本地防火墙、VPN网关防火墙、运营商防火墙均开放该端口的TCP入站规则。
    • 可以用telnet 服务器IP 端口或Test-NetConnection命令测试端口是否可达。
  • 检查VPN路由:确认VPN连接后,客户端的路由表是否将服务器IP的流量导向VPN链路,部分VPN仅对特定网段生效,需手动添加路由规则。
  • 优化异常处理:捕获异常时不要用throw ex,会丢失原始栈跟踪信息,直接写throw即可。

内容的提问来源于stack exchange,提问作者Alvaro Vian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 11:50:22