![多宿主服务器上应用程序的绑定地址](https://linux22.com/image/710053/%E5%A4%9A%E5%AE%BF%E4%B8%BB%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E7%9A%84%E7%BB%91%E5%AE%9A%E5%9C%B0%E5%9D%80.png)
我有一个通过 quagga 运行 bgp 的多宿主服务器
如果我在此服务器上启动一个发起连接的应用程序,默认情况下它将选择具有最低度量的接口,即 bgp 路由器邻居的地址,这很不幸,因为这些邻居地址甚至无法向上游传递。
如果启动连接的软件无法绑定到特定 IP 地址,是否可以通过其他方法让应用程序绑定到特定 IP?使用动态路由调整指标以偏好接口似乎不可行。
如果没有其他办法,可以选择在 jail 中运行 bgp 并使用 vnic
编辑
如果有人能解释:我将奖励他:
如何做到这一点。
解释如何在 Linux 上做到这一点(如果在 BSD 上不可能做到)。
提供为什么目前不可能做到这一点的权威参考。
答案1
我们通常会向服务器添加路由,告诉它下一跳是某个 IP 地址。它将在下一跳使用位于同一子网中的卡。
您没有说是什么操作系统,但我在您的标签中看到了 freebsd,所以我假设是那样。
您必须将 freebsd 变成路由器,然后添加静态路由。有关以下内容的更多详细信息,请访问 freebsd.org,使用此链接。以下信息来自那里。
30.2.2. 使用静态路由配置路由器
由 Al Hoang 贡献。
如果 FreeBSD 系统是双宿主系统,则可以将其配置为网络的默认网关或路由器。双宿主系统是驻留在至少两个不同网络上的主机。通常,每个网络都连接到单独的网络接口,但可以使用 IPaliasing 将多个地址(每个地址位于不同的子网上)绑定到一个物理接口。
为了使系统能够在接口之间转发数据包,必须将 FreeBSD 配置为路由器。 Internet 标准和良好的工程实践阻止 FreeBSD 项目默认启用此功能,但可以通过在 /etc/rc.conf 中添加此行将其配置为在启动时启动:
gateway_enable="YES" # 如果此主机将作为网关,则设置为 YES
要立即启用路由,请将 sysctl(8) 变量 net.inet.ip.forwarding 设置为 1。要停止路由,请将此变量重置为 0。
路由器的路由表需要额外的路由,以便知道如何到达其他网络。可以使用静态路由手动添加路由,也可以使用路由协议自动学习路由。静态路由适用于小型网络。
有关配置示例和更多详细信息,请访问此链接在 freebsd.org