多出口IP指定

多出口IP指定多 IP 指定出口 IP 地址如何指定云服务器源 IP 如果一个主机绑定有多个 IP 地址 那么在被动响应和主动发起连接两种方式中 源 IP 地址的选择机制肯定是有所差异的 主机在接收外部数据包 并发送响应数据包时 响应源地址显然就是客户端请求的地址 这是非常容易理解的 如客户端向主机的 1 1 2 3 80 发起请求 那么主机响应数据包的源 IP 地址一定是 1 1 2 3 那么当主机对外主动发起请求时

多IP指定出口IP地址 如何指定云服务器源IP?

如果一个主机绑定有多个IP地址,那么在被动响应和主动发起连接两种方式中,源IP地址的选择机制肯定是有所差异的。主机在接收外部数据包,并发送响应数据包时,响应源地址显然就是客户端请求的地址,这是非常容易理解的,如客户端向主机的1.1.2.3:80发起请求,那么主机响应数据包的源IP地址一定是1.1.2.3

那么当主机对外主动发起请求时,数据包的源IP地址如何选择?这个问题我们可能一般很少深入了解, 为了弄清楚这个问题,我发了不少时间,广泛查阅各种资料,目前得出的结论如下:

 

Linux 2.2 选择源IP的三种机制

§ 1. 应用程序可以通过bind(2)系统调用,应用至sendmsg(2)调用上,并通过辅助数据对象IP_PKTINFO,从而显式指定源IP地址。在这种情况下,操作系统内核仅仅检查其源IP地址是否正确,否则产生相应的错误。

§ 2. 如果应用程序没有指定源IP地址,包含源IP的路由表将决定数据包源IP地址,通过设置ip route命令的src参数,从而指定源IP地址。如果路由表没有包含src属性,则使用主要IP地址。

§ 3. 其它情况下内核搜寻绑定定数据包路由接口上的IP地址,IPv6选择第一个可用的IP地址。IPv4情况下,尽量选择与目标IP处于同一子网的源IP,如果目标IP与自己的所有ip没有处于同一子网,则使用第二种算法。

相同/不同子网情况

默认情况下,如果Linux的网卡有多个IP且位于不同的子网之中,如果数据包目标地址为某个子网中的IP, 那么对应的与目标同子网的IP将会被使用。如果eth0有两个IP 192.168.1.12/24,  10.1.1.1/8,那么到10.0.0.0子网的数据包的源地址将使用10.1.1.1 当然可以使用ip routesrc属性指定源址。

如果绑定的几个IP处于同一个子网内,那么主要IP地址将被使用(如eth0接口上的IP也可以使用iptables修改数据包的源地址实现之,如:

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

 IP指定出口ip实例

原理分析及处理办法我们已经分析完毕,接下来使用实际的例子展示

目标:当此主机对外发起新连接时,源IP地址使用192.168.0.22, 不使用默认的192.168.0.250

环境:Linux 主机绑定有以下几个IP(网关为192.168.0.1
eth0 192.168.0.250/24,  eth0: 1  192.168.0.22/24,   eth0:2 192.168.0.23/24

另外,绑定多个IP可使用ip addr add命令,不产生子接口。

在上述案例中192.168.0.250将成为默认主要IP

 

方法一:修改路由表的源IP属性

查看系统的 ip 地址及路由表详细信息 ( 加粗字体是输入的内容 )

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

[root@localhost ~]# ip addr

 

1: lo: 

 mtu 16436 qdisc noqueue

 

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

 

inet 127.0.0.1/8 scope host lo

 

inet 192.168.100.250/32 scope global lo

 

2: eth0: 

 mtu 1500 qdisc pfifo_fast qlen 1000

 

link/ether f4:6d:04:76:ca:98 brd ff:ff:ff:ff:ff:ff

 

inet 192.168.0.250/24 brd 192.168.0.255 scope global eth0

 

inet 172.16.25.1/24 scope global eth0

 

inet 192.168.0.22/24 scope global secondary eth0

 

inet 192.168.0.23/24 scope global secondary eth0

 

请注意 192.168.0.250是global状态,而其它地址是secondary状态。

 

1

2

3

4

5

6

7

8

9

[root@localhost ~]# ip route

 

192.168.0.0/24 dev eth0  proto kernel  scope link  src 192.168.0.250

 

172.16.25.0/24 dev eth0  proto kernel  scope link  src 172.16.25.1

 

169.254.0.0/16 dev eth0  scope link

 

default via 192.168.0.1 dev eth0

注意以上输出,会发现到同一子网的路由的源IP地址会使用主要IP地址。而到默认网关的路由没有指定源IP(实际上会用与网关同一子网的主要IP)。

修改路由表,让系统使用指定IP(192.168.0.22)作为源址:

1

2

3

4

5

6

7

8

9

10

11

12

13

[root@localhost ~]# ip route change default dev eth0 src 192.168.0.22

 

[root@localhost ~]# ip route change to 192.168.0.0/24 dev eth0 src 192.168.0.22

 

[root@localhost ~]# ip route

 

192.168.0.0/24 dev eth0  scope link  src 192.168.0.22

 

172.16.25.0/24 dev eth0  proto kernel  scope link  src 172.16.25.1

 

169.254.0.0/16 dev eth0  scope link

 

default dev eth0  scope link  src 192.168.0.22

方法二,使用iptables修改源IP地址:

1

iptables -t nat -I POSTROUTING -o eth0 -d 0.0.0.0/0 -s 192.168.0.250 -j SNAT –to-source 192.168.0.22

方法二比较简单,大家可以写好脚本来切换出口IP地址

参考文章

http://linux-ip.net/gl/ip-cref/node155.html
http://serverfault.com/questions/12285/when-ip-aliasing-how-does-the-os-determine-which-ip-address-will-be-used-as-sour

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/209758.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 上午8:29
下一篇 2026年3月19日 上午8:29


相关推荐

  • 如何成为大数据架构师_业务架构师和数据架构师

    如何成为大数据架构师_业务架构师和数据架构师要想成为架构师这几点你必须关注!架构不是一个职业而是一种能力,每一种架构师只不过是在不同的领域里面使用不同的技术,没有什么可对比,就好比如你问一个篮球明星和一个足球明星有什么区别一样!01架构师需要考虑四个问题1.确定系统干什么不干什么,也就是说系统的边界在哪里?2.确定架构内部的模块与模块之间的关系,以及模块与外部之间的关系是什么?3.架构确定以后,有能力去指导…

    2025年5月28日
    9
  • 0代码,一键部署 Qwen3!

    0代码,一键部署 Qwen3!

    2026年3月13日
    2
  • Java学习路线图[通俗易懂]

    Java学习路线图[通俗易懂]一、Java学习路线图   二、Java学习路线图——视频篇 六大阶段学完后目标知识点配套免费资源(视频+笔记+源码+模板)密码     第一阶段Java基础 入门学习周期:35天学完后目标:1.可进行小型应用程序开

    2022年5月13日
    63
  • 火山引擎推出Data Agent评测体系,并发布《2025数据智能体实践指南》

    火山引擎推出Data Agent评测体系,并发布《2025数据智能体实践指南》

    2026年3月15日
    2
  • 原来都是freesync惹的锅「建议收藏」

    原来都是freesync惹的锅「建议收藏」今天贪便宜入了一款创维的2k显示屏,开始用N卡+DP线驱动得挺稳定,然后手闲开了freesync,结果就各种闪烁、条纹。最无奈的是显示器菜单里freesycn选项竟然灰了,关不上了,呜呼!在打算退货前,胡乱操作了一通,例如,菜单里恢复出厂设置,无果。用HDMI线降分辨率、降刷新率,无果。进入工程界面(按住M在POWERON),没敢乱调,退出。然后再在菜单里恢复出厂设置…….最后菜单中选模式为文本,重新DP线接入,竟然freesync被神奇地关闭了。之后,2k屏就再没闪过,千万不要乱动free

    2022年6月10日
    53
  • MITM中间人攻击

    MITM中间人攻击MITM 中间人攻击定义 中间人攻击是一种间接的入侵攻击 通过各种手段将入侵者控制的一台电脑放置在两台连接在网络中的电脑之间 这台入侵的电脑就叫做中间人 常见的攻击手段 1 ARP 欺骗 攻击者将网卡设置为混杂模式 伪装成代理服务器监听特定的流量来实现攻击 这是因为很多通信协议都是以明文来传输的 比如 HTTP FTP Telnet 等 不过 随着交换机代替集线器 简单的嗅探已经不能成功 必须使用 ARP 欺骗才能实现攻击 2 SMB 会话劫持 3 DNS 欺骗 4 为 HTTPS 提供假证书

    2026年3月16日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号