多IP情况下指定具体的出口IP

在项目中遇到服务器有两个IP(一个真实IP一个VIP),然后出口IP必须为VIP的情况。
针对这样的需求有2种解决方案。

1、修改 ip route
通过systemd的方式在开机的时候执行脚本来修改ip route
a、先查看现有的ip route
执行 ip route,然后可以看到类似的结果:
default via 10.100.103.1 dev ens18 proto static metric 100
10.100.103.0/24 dev ens18 proto kernel scope link src 10.100.103.222 metric 100
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown

b、根据获取到的信息编写执行脚本,可以把脚本放到/home目录下
脚本完整路径:
/home/network.sh
脚本内容(其中10.101.19.1要改为上一步中获取到的网关地址):
ip route replace default via 10.101.19.1 dev ens192 src 10.101.19.104

c、给脚本可执行权限

chmod +x /home/network.sh

d、添加一个systemd服务
服务完整路径:
/etc/systemd/system/network-trans.service
服务内容:

[Unit]
Description=Network trnasform

[Service]
#User=root
ExecStart=/bin/bash /home/network.sh
Restart=on-failure
RestartSec=30s

[Install]
WantedBy=multi-user.target

e、启用脚本
systemctl enable network-trans.service
systemctl start network-trans.service

f、检查运行结果

systemctl status network-trans.service

如果是loaded状态说明执行成功,然后看一下ip route,会多出一行类似的,如果有就可以了。
default via 10.101.19.1 dev ens192 src 10.101.19.104

2、增加iptables规则
这个方案需要已经安装了iptables服务,并且需要关闭firewalld服务,具体看你那边的情况是否允许,具体步骤如下:
a、启动iptables服务,并设置为开机启动

systemctl start iptables
systemct enable iptables

b、把firewalld禁用

systemctl disable firewalld

c、添加规则并持久化保存

iptables -t nat -I POSTROUTING -o ens192 -d 0.0.0.0/0 -j SNAT --to-source 10.101.19.104
service iptables save

d、查看 /etc/sysconfig/iptables,确认上面的规则已经添加成功

# 查看规则
 iptables -t nat -L -n
# 删除规则
 iptables -t nat -D POSTROUTING 1

你可能感兴趣的:(多IP情况下指定具体的出口IP)