背景
服务器上有多个IP,那么在服务器请求外部服务的时候,到底是使用哪个IP呢?如果要使用特定的IP去请求外部服务,该如何设置呢?
分析
遇到一个实际的场景:
我们产品和其他产品联调,我们的服务器有多个IP。对方需要对我们的IP进行加白。但是对方需要我们指定的IP来加白,而不是使用当前默认的。所以,我们需要修改对外访问的IP。
使用下面命令可以查看路由表:
route -n
可以看到,当前的网关为10.58.115.65,本机使用了10.58.115.75和10.58.115.74。默认情况下,出去的IP使用的是10.58.115.75 ,现在需要固定10.58.115.74作为出口IP。如何做呢?
要实现这个效果,我们只需要在路由表中添加一个规则,将请求到对方IP的路由指定源IP即可。
向路由表添加规则,使用ip route add命令。
语法:
ip route add <Destination> via <Gateway> src <SIP> dev <Use Iface>
Destination为目的IP,via表示通过那个网关,Gateway表示网关。SIP就是源IP,即服务器的出口IP。dev表示设备,即通信使用的网卡Use Iface。
示例:
我们要指定请求1.1.1.1的时候,将源IP固定为10.58.115.74。
命令如下:
ip route add 1.1.1.1 via 10.58.115.65 src 10.58.115.74 dev eth0
添加完就是这个效果,而且就立即生效了。
注意,千万不要删除默认的路由,即Destination 为0.0.0.0的这一条,否则本机就无法访问了。
通过新增一条指定的目的IP的规则,不影响默认的请求的转发。
下面是几个常用的操作:
ip route { add | del | change | append | replace } ROUTE
花括号内为动作,就是新增、删除、修改、追加和替换。ROUTE就是后面的路由规则了。
有了add的示例,相信其他的也是一用就会的了。
总结
路由表默默的为服务器工作着,一般情况不会去手动设置。当有特殊的路由转发请求时,就需要对路由表进行操作了。
来源: http://www.yu7s.com/article/20240319203836581.html