我在运行 VMware(我相信是 VSphere)的虚拟机中创建的一些新服务器上遇到了问题,这些服务器使用的是 Ubuntu 12。这是在 ISP 上,而不是我的桌面上。我认为我们的旧数据中心也存在同样的问题,但从未真正找到解决方法。我们只是停止使用多宿主,只使用其中一个 IP 地址(我们希望一个在 DMZ 中,另一个仅在内部)。我们希望数据库仅在 INT 子网上可用
问题(简短版本):尝试在 Ubuntu 下配置多宿主,但只能让一个 IP 响应。
更长的版本 - 我们希望有两个网络,一个是 DMZ,可以访问外部互联网,另一个是 INT,它是内部网络,只能访问我们数据中心内的其他服务器。我可以定义它们,使它们在 ifconfig、netstat -nr 和 IP route show 中正确显示,但如果我尝试访问服务器上的服务,我只能让其中一个或另一个响应,另一个会超时。哪个响应在重新启动之间保持一致。
从我读过的所有内容来看,我们对事物的定义都是正确的,但也许我们遗漏了一些东西,或者由于我们在 VMware 下,所以还有一些特殊的事情需要做。
如果我尝试 SSH 或 PING 进入 DMZ 地址,它会正常工作。如果我尝试 INT 地址,它会超时。没有迹象表明它被 iptables 阻止,也没有日志中的任何其他相关错误消息。
如果我单独尝试,它们都会成功。只有当我尝试多宿主时,访问才会失败
背景:
VMware 下的 Ubuntu 12.04 LTS
名称已更改但保持一致。A 和 B 是不同的数字,并一致替换。其他的与我们配置中的相同。
Local server name mapping
DMZ_001 10.A.B.64/26
INT_002 10.A.B.128/27
DMZ - 10.A.B.71 (eth0)
INT - 10.A.B.140 (eth1)
下面是 ifconfig、netstat -nr、ip route show 和接口文件。如果有其他信息可以提供帮助,请告诉我。
=====================
username@servername:~$ cat /etc/network/interfaces
iface lo inet loopback
auto lo
#DMZ
auto eth0
iface eth0 inet static
address 10.A.B.71
netmask 255.255.255.192
gateway 10.A.B.65
#up route add default gw 10.A.B.65
dns-nameservers 8.8.8.8 8.8.4.4
# INT
auto eth1
iface eth1 inet static
address 10.A.B.140
netmask 255.255.255.224
gateway 10.A.B.129
#up route add default gw 10.A.B.129
dns-nameservers 8.8.8.8 8.8.4.4
dns-search thinaire.net
================================
username@servername:~$ netstat -nr
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 10.A.B.65 0.0.0.0 UG 0 0 0 eth0
10.A.B.64 0.0.0.0 255.255.255.192 U 0 0 0 eth0
10.A.B.128 0.0.0.0 255.255.255.224 U 0 0 0 eth1
================================
username@servername:~$ ip route show
default via 10.A.B.65 dev eth0 metric 100
10.A.B.64/26 dev eth0 proto kernel scope link src 10.A.B.71
10.A.B.128/27 dev eth1 proto kernel scope link src 10.A.B.140
username@servername:~$
============================
username@servername:~$ ifconfig
eth0 Link encap:Ethernet HWaddr 00:50:56:ac:5e:1b
inet addr:10.A.B.71 Bcast:10.A.B.127 Mask:255.255.255.192
inet6 addr: fe80::250:56ff:feac:5e1b/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:26089 errors:0 dropped:9 overruns:0 frame:0
TX packets:18282 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3784760 (3.7 MB) TX bytes:2359060 (2.3 MB)
eth1 Link encap:Ethernet HWaddr 00:50:56:ac:06:44
inet addr:10.A.B.140 Bcast:10.A.B.159 Mask:255.255.255.224
inet6 addr: fe80::250:56ff:feac:644/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4437 errors:0 dropped:8 overruns:0 frame:0
TX packets:726 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:295739 (295.7 KB) TX bytes:74047 (74.0 KB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
答案1
在 Linux 中配置的每个路由表不能有多个默认网关这边走。
要拥有多个默认网关,您需要为每个源 IP 配置单独的路由表。
类似这样的:
ip 路由通过 10.AB65 src 10.AB71 表 1 添加默认
ip 路由添加 10.AB64/26 dev eth0 表 1
ip 路由添加 10.AB128/27 dev eth1 表 1
ip 规则从 10.AB71 查找 1 添加
对于第二个接口
ip 路由通过 10.AB129 src 10.AB140 表 2 添加默认
ip 路由添加 10.AB64/26 dev eth0 表 2
ip 路由添加 10.AB128/27 dev eth1 表 2
ip 规则从 10.AB140 查找 2 添加
您可能还想向这些路由表添加其他路由
要在 /etc/network/interfaces 中配置它,您可以将这些命令放入脚本中并调用up
指令(请参阅man 5 interfaces
)
自动 eth0 iface eth0 inet 静态地址 10.AB71 网络掩码 255.255.255.192 网关 10.AB65 up /usr/local/bin/eth0-up.sh dns-nameservers 8.8.8.8 8.8.4.4
其中 eth0-up.sh 是包含以下内容的文件:
#!/bin/bash
ip route add default via 10.A.B.65 src 10.A.B.71 table 1
ip route add 10.A.B.64/26 dev eth0 table 1
ip route add 10.A.B.128/27 dev eth1 table 1
ip rule add from 10.A.B.71 lookup 1
重复同样的操作eth1