【问题标题】:How do I specify the outgoing IP address of a database connection?如何指定数据库连接的传出 IP 地址?
【发布时间】:2011-08-27 14:45:21
【问题描述】:

我有一个需要连接到数据库服务器的具有多个 IP 地址的 Web 服务器。数据库服务器位于由 IP 地址白名单控制的防火墙后面。 (如果有关系,那就是Oracle服务器。)有没有办法在OracleConnection中指定Web服务器使用的IP地址,这样只需将一个IP添加到白名单中?

我看到有一些关于指定传出 IP 地址的类似问题(例如 this one 和从那里链接的一对),但没有一个特别提到数据库连接。

【问题讨论】:

  • 为什么是近距离投票?为什么这是题外话?
  • 别担心,在这种情况下,“关闭”投票(如果它获得足够的票数)不是删除问题,而是将其移动到 serverfault,在那里您可以访问范围更广的网络专业人士。
  • @Jeffrey Kemp:这就是我想知道的。我通过投票假设编程解决方案不太可能,因此 ServerFault 是一个更好的地方来询问这个问题?

标签: c# database oracle networking ip-address


【解决方案1】:

数据库方面没有发挥作用(很多)。

在我的简单网络中,我有一个调制解调器/路由器,它从我的 ISP 获取互联网 IP 地址,并为本地网络提供不同的 IP 地址。我已将其配置为将在端口 80(用于 HTTP 请求的端口)上发出的请求转发到本地网络上的特定 IP 地址。

IP 地址可以通过动态 (DHCP) 或静态分配。因为我希望我的 HTTP 请求发送到特定机器,所以我需要该机器始终具有相同的 IP 地址。一种方法是让机器在连接到网络时请求静态 IP 地址。另一种方法是让路由器动态分配 IP 地址,但始终将特定地址用于特定 MAC 地址。我走的是后一条路线。您选择做什么以及如何做取决于您的情况(例如操作系统和网络设置)。

在您的情况下,您希望本地网络地址对于数据库服务器和 Web 服务器都是静态的。这确实是一个网络问题。

编程可能发挥作用的唯一时间是您有多个网络端口。拿我的笔记本电脑。它有一个 WiFi 卡和一个以太网端口。它们中的每一个都有一个唯一的 MAC 地址(实际上世界上每个网络设备都有一个唯一的 MAC 地址)。我可以将这些端口中的一个或两个连接到一个网络或两个不同的网络。

如果我将两台设备连接到同一个网络,它们必须具有不同的 IP 地址,因为 IP 地址对于网络来说必须是唯一的,这样网络才能知道将消息发送到哪里。如果我将它们连接到两个不同的网络,那么它们可能会获得相同的 IP 地址。 [互联网是一个大网络,但局域网(LAN)是独立的。]

如果您的机器有多个网络连接,您可能需要将特定连接定向到某个网络(所以我可能总是希望我的 db 连接使用 eth0 端口和其他要使用的东西和 eth1 端口)。

【讨论】:

  • 实际上,有一种方法可以让两个网卡在完全相同的网络上分配相同的 IP 地址来响应。无论卡在相同还是不同的服务器上,都可能发生这种情况。此功能由集群环境中的机器使用,通常用于故障转移场景。
【解决方案2】:

一般而言,对于 Web 服务器,您有一个或多个外部可寻址 IP,但只有一个内部 IP。

内部地址是连接到您的内部网络的地址,用于与数据库服务器等通信。当外部客户端连接或进行出站通信时使用外部的..

【讨论】:

  • 我在另一台服务器上的另一个应用程序中看到了一个问题(Win 2008;这个恰好是 Win 2003),其中似乎每次重新启动服务器时使用不同的 IP 地址或其他东西。我是否应该期望内部 IP 地址始终相同?
  • 这不是答案。需要指出的是,我们的 HP Proliant 服务器有两个以太网端口,因此有两个可从 Intranet 访问的 IP 地址。我不确定它使用哪个 IP 地址连接到数据库等,但我想它可以使用任何一个。根据我的理解,如果一个连接失败,它将尝试另一个连接 - 一个不同的 IP 地址。
  • @Andy:IP 地址更改的主要原因是它是 DHCP 还是硬分配。出于各种原因,服务器实际上不应该是 DHCP 的。如果 IP 是硬分配的,那么另一个原因是两个 IP 都指向内部网络。此时,服务器将根据驱动程序设置、正在使用的 TEAMing 以及可能设置的各种其他选项来选择主要选项。
  • @Mel:实际上,这取决于您的连接配置方式。根据所使用的端口和驱动程序使用的芯片,它们可以是负载平衡的(称为 TEAMing)或故障转移,或者特定数据包从哪一个出来几乎是随机的。系统管理员会知道的。
  • 感谢您的解释。我明白了,我有很多东西要了解连接中“幕后”发生的事情。我希望有一个程序化的解决方案(例如我可以设置的属性),但现在我明白为什么这不完全可行了。
【解决方案3】:

我会假设“多个 IP 地址”在 DMZ(外部网络)中,并且数据库服务器在不同的(内部)网络中,不是吗?你不应该有这个问题。

【讨论】:

  • 我没有完全关注你。数据库服务器具有机器级防火墙,但它与 Web 服务器位于同一内部网络中。我将其中一个 IP 地址添加到白名单中,但查看数据库服务器上的日志,我们看到 Web 服务器正在与其他 IP 地址之一连接。我想知道我是否可以指定要连接的 IP 地址,如果不能,我能否确定它将始终使用该 IP 地址。这有帮助吗?谢谢。
猜你喜欢
  • 1970-01-01
  • 2013-06-28
  • 1970-01-01
  • 2020-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
相关资源
最近更新 更多