美文网首页
多IP情况下指定具体的出口IP

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

作者: 哦呵呵_3579 | 来源:发表于2022-03-14 20:56 被阅读0次

    在项目中遇到服务器有两个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

          本文链接:https://www.haomeiwen.com/subject/dhejdrtx.html