tcp/udp客户端连接secondary IP的情况

部署运行你感兴趣的模型镜像

linux中,如果在一张网卡上配置多个同一网段的ip,那么除了第一个被配置的之外,其余的都将是secondary IP。如果一个udp服务器bind了0.0.0.0地址,而一个udp客户端来连接一个secondary IP,那么连接是不会正常的,抓包会发现udp服务器的回复包的源ip是一个primary IP,而不是它所连接的secondary IP。对于tcp则不存在这样的问题。这是linux内核协议栈所决定的。
对于tcp而言,监听0.0.0.0会导致它接受所有连接本机ip地址的客户端,只要这个ip在本机即可,这是通过路由得知的,只要数据包越过了网络层,到达了tcp_v4_rcv并且成功在监听套接字中找到了端口,那么服务器将建立一个通信套接字,该套接字的源ip完全对应于客户端的目的ip,而对于监听0.0.0.0的udp服务器而言,由于它是没有连接的,在bind的时候,inet数据结构的saddr字段就是0.0.0.0,因此只有在服务器实际回复数据的时候到达网络层填写ip头的时候才会确定回复包的源地址,此时,协议栈已经完全忘记了来源包的目的地址(udp无连接),因此路由完毕找到了出口的时候,如果该条路由没有源地址信息,那么将会调用inet_select_addr来选择一个ip地址,这个函数选择ip的策略就是首先在路由结果的出口设备上按照一定原则找primary地址,如果找不到,则在所有的设备上按照一定原则找primary地址,可见secondary地址是无论如何都不能被选中的。
使用OpenVPN可以做一个测试,udp情况下设置服务器bind 0.0.0.0 1194,然后为服务器添加一个secondary IP-1.2.3.5/24,然后客户端连接之,会出现下面的出错报告:
Incoming packet rejected from 1.2.3.4:1194[2], expected peer address: 1.2.3.5:1194 (allow this incoming source address/port by removing --remote or adding --float)
可见事实。如果加上float就可以了,这个float并不是为了解决secondary IP的问题的,其实这并不是一个问题,这只是一个机制而已。float是为了解决服务器ip地址变化问题的,这里只是歪打正着的解决了secondary IP所谓的问题。

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

### 如何在CentOS上配置和使用DATAGIP连接 #### 安装必要的依赖包 为了确保能够在CentOS上顺利配置和使用DATAGIP连接,首先需要安装一些必要的软件包。这些软件包通常包括网络工具和其他支持库。 ```bash sudo yum update -y sudo yum install -y epel-release sudo yum install -y net-tools iproute bind-utils ``` 上述命令会更新现有软件包至最新版本,并安装额外的扩展源以及常用的网络诊断工具[^1]。 #### 配置静态IP地址 对于稳定的DATAGIP连接来说,配置一个固定的IP地址是非常重要的。编辑`/etc/sysconfig/network-scripts/ifcfg-eth0`文件(假设使用的接口名为eth0),添加或修改如下内容: ```plaintext BOOTPROTO=static ONBOOT=yes IPADDR=<Your Static IP Address> NETMASK=<Subnet Mask> GATEWAY=<Gateway IP Address> DNS1=<Primary DNS Server> DNS2=<Secondary DNS Server> ``` 保存更改后重启网络服务使新设置生效: ```bash sudo systemctl restart network ``` 这一步骤确保了即使系统重启也能保持相同的网络参数。 #### 设置路由规则 如果目标是建立特定的数据传输路径,则可能还需要自定义路由表项来优化数据流方向。可以利用`ip route add`命令手动增加新的路由记录;而更持久的方式是在相应的网络脚本中加入相应指令。 例如,在同一目录下的ifcfg-eth0文件里追加一行指定默认网关之外其他子网访问途径: ```plaintext POSTUP="ip route add 192.168.2.0/24 via 192.168.1.1 dev eth0" ``` 此操作使得当该接口启动时自动创建通往另一侧LAN环境的最佳路径。 #### 启用防火墙端口转发功能 考虑到安全性因素,默认情况Linux主机上的iptables可能会阻止外部请求到达内部应用程序监听的服务端口。因此有必要开放对应于DATAGIP应用所需的TCP/UDP端口号范围内的流量通行权限。 执行下面两条语句即可实现这一目的: ```bash sudo firewall-cmd --zone=public --reload ``` 这里假定要开启的是连续区间内的一组端口供客户端程序调用。 #### 测试连通性 最后但同样重要的是验证整个过程是否成功完成了预期效果。可以通过ping测试、telnet尝试连接远程服务器等方式来进行初步检验。另外也可以借助专门设计用于评估性能指标的应用程序进一步深入分析实际表现情况。 ```bash ping www.example.com telnet example.server.port.number ``` 以上就是关于如何在CentOS平台上实施DATAGIP连接所需采取的主要措施概述。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值