Linux   发布时间:2022-04-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了linux – 在进行出站TCP连接时,无法绑定到特定的IPv4地址,也不能绑定到同时解析为IPv4和IPv6地址的主机名大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

我花大约6个小时试图解决这个问题,现在我相信当连接到具有IPv6地址的主机名时,CentOS / Linux无法绑定到特定的虚拟IPv4地址.这是具有多个IP地址的服务器上的问题. 我正在使用Centos 6(Linux内核2.6.32-573.12.1.el6.x86_64) 重现这个大: >查找至少具有/ 29 IPv4公共地址空间和IPv6公共IP的Linux计算机. >为主接口(eth0
我花大约6个小时试图解决这个问题,现在我相信当连接到具有IPv6地址的主机名时,CentOS / Linux无法绑定到特定的虚拟IPv4地址.这是具有多个IP地址的服务器上的问题.

我正在使用Centos 6(Linux内核2.6.32-573.12.1.el6.x86_64)

重现这个大:

>查找至少具有/ 29 IPv4公共地址空间和IPv6公共IP的Linux计算机.
>为主接口(eth0或其他)至少添加@L_696_3@额外的IPv4.对于此示例,我将30.0.0.1视为计算机的主要eth0 IPv4地址,30.0.0.2是在30.0.0.0/29的网络上绑定到eth0:2的别名.
>查找同时具有IPv4和IPv6地址的主机名.例如,www.microsoft.com.
> telnet -b 30.0.0.2 www.microsoft.com 80(此测试使用特定的ipv4地址进行出站连接)
>尝试主机名的IPv6地址失败后,IPv4请求成功连接,但TCP连接实际上是从计算机的主IP(30.0.0.1)启动的,而不是您想要的IP(30.0.0.2). Netstat说不然,但是错了.如果连接到您拥有的主机名并且可以查看其日志,则连接来自主IP(30.0.0.1)而不是您想要的IP(30.0.0.2).
>尝试另@L_696_3@没有IPv6地址的域,例如:telnet -b 30.0.0.2 serverfault.com.有用.它通过您想要的IP建立连接.

这是@L_696_3@问题,因为某些程序(如邮件(exim))在发出出站TCP请求时需要使用某些IP,这不一定是主机的IP.在进行出站TCP连接时,计算机上的某些客户端/程序依赖ACL或反向DNS来正确匹配.

因此,如果其他人注意到在进行传出连接时程序无法绑定到正确的接口的同样奇怪的问题,这可能就是原因.

此问题仅影响IPv4连接. IPv6连接正确绑定到计算机上的任何传出IP.

这不是telnet的问题.我也使用我的邮件服务器(exim)测试了这个问题,并得到了类似的结果.如果目标主机名具有IPv6地址,则从错误的IP进行IPv4连接.

也许某人有解决这个奇怪问题的方法,但此时,我认为这可能是@L_696_3@Linux网络错误.

Ps-如果有人想知道为什么不在主机名解析为IPv6地址时建立IPv6连接…有时IPv6地址已关闭或连接无法建立,则它将恢复为其IPv4地址.

解决方法

您可以信任netstat为您提供有关IP地址的正确信息(至少只要使用-n).

如果TCP连接的端点不同意正在使用的IP地址,则意味着两者之间存在NAT.

评论中提供的其他信息中我们了解到,在这种特殊情况下,@L_696_3@多余的iptables规则-A POSTRoutING -j MASQUERADE就是问题的原因.

大佬总结

以上是大佬教程为你收集整理的linux – 在进行出站TCP连接时,无法绑定到特定的IPv4地址,也不能绑定到同时解析为IPv4和IPv6地址的主机名全部内容,希望文章能够帮你解决linux – 在进行出站TCP连接时,无法绑定到特定的IPv4地址,也不能绑定到同时解析为IPv4和IPv6地址的主机名所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。