linux – 当IP别名时,操作系统如何确定哪个IP地址将用作出站TCP
我有一台运行Ubuntu Server的服务器,在一个NIC上有四个别名的IP地址.
eth0 192.168.1.100 eth0:0 192.168.1.101 eth0:1 192.168.1.102 eth0:2 192.168.1.103 (为了示例,使用192.168.x.x,假设它们被NAT转换为一系列公共IP地址) 我们的一个客户通过FTP发布他们的库存,因此我们每晚登录以从他们的服务器下载一个大文件.他们的防火墙希望我们的(被动)FTP连接来自192.168.1.100. 鉴于我的服务器逻辑上在一个适配器上有四个IP地址,操作系统如何确定哪个IP地址用作出站TCP / IP连接的源? 假设我在192.168.1.101上进入我的服务器并以交互方式运行FTP.出站TCP / IP连接是否会使用192.168.1.101,因为操作系统知道我的shell连接的接口是什么? 如果FTP任务是通过没有shell的cron作业以非交互方式运行的,该怎么办? 你可能会说,这让我很困惑,所以我希望我的问题至少有 编辑 为了澄清我要问的原因 – 我没有对路由表进行任何更改,它实际上将’eth0’列为0.0.0.0路由的IFace.但是,所有迹象都表明它实际上使用eth0:0作为源. Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 eth0 我可以摆弄路由表或让我们的客户更改他们的防火墙规则以获得我需要的行为,但我正在尝试深入了解这是如何工作的,以了解操作系统中是否存在错误或仅仅是我天真的理解所有部分如何组合在一起. 谢谢 解决方法
默认情况下,在Linux上,如果接口有多个位于不同子网上的地址,则发往相应子网的流量将具有正确的源IP.也就是说,如果eth0有两个地址192.168.1.1/24和10.1.1.1/8,那么到10.0.0.0子网上的任何内容的流量将具有源10.1.1.1,并且到192.168.1.0子网上的任何内容的流量将具有源192.168.1.1.在这种情况下,您还可以使用“ip route”的“src 1.2.3.4”选项显式分配源地址.
但是,在您的情况下,您的所有地址都在同一个子网上,因此“主要”地址(由“ip addr list dev eth0”显示)将用作该接口上流量的源IP.我认为在这种情况下只使用“ip route”控制源IP是可能的,但我发现使用iptables重写感兴趣的流量的源地址更容易. 如果要强制将特定源地址用于特定目标,可以使用SNAT规则执行此操作: iptables -t nat -I POSTROUTING -o eth0 -d dest-IP-or-net/mask -s primary-IP-of-eth0 -j SNAT --to-source desired-source-IP 因此,如果您的“主要”eth0 IP为192.168.100.1,但您希望流量为1.2.3.4的源为192.168.100.2,则执行以下操作: iptables -t nat -I POSTROUTING -o eth0 -d 1.2.3.4/0 -s 192.168.100.1 -j SNAT --to-source 192.168.100.2 请注意,“ – s 192.168.100.1”很重要:它可以防止转发的流量的源地址被此规则重写. 如果要在Linux上实现复杂的网络配置,则应阅读Linux高级路由和流量控制文档http://lartc.org (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- linux – 如何从RedHat中删除“Red Hat Network Code”?
- linux – 在CentOS 7中更新Yum时的依赖性冲突
- LINUX实战:在Ubuntu中用Visual Studio Code编译调试C\
- linux – 为什么报告错误后scp的退出状态为0?
- linux – 如何使用AcceptEnv配置环境变量
- linux – 扩展超过65k的打开文件(TCP连接)
- linux – 删除计算机帐户后如何使用Samba重新加入AD2003域?
- linux – 跨不同子网的故障转移
- linux – 没有重复的排列列
- 如何计算专用squid服务器的ulimit -n(文件描述符)