如何使用远程 Linux 服务器的 IP 作为我当前 Linux 服务器的附加 IP?

如何使用远程 Linux 服务器的 IP 作为我当前 Linux 服务器的附加 IP?

我有 2 个 Linux 服务器“X”和“Y”。

服务器 X 拥有大量资源,但有 2 个公共 IP(1 个主 IP 绑定为 eth0,1 个附加 IP 绑定为 eth0:0)。

服务器 Y 有 9 个公网 IP(1 个主 IP 绑定为 eth0,8 个附加 IP 绑定为 eth0:0 到 eth0:7),但资源有限。

我想在服务器 X 上使用服务器 Y 的附加 IP(8 个 IP),以便服务器 X 总共有 10 个 IP。

我在 Google 上搜索了一下,我认为使用 IPIP 隧道/GRE 隧道可以实现这一点,我已经尝试了几天,但到目前为止还没有成功。

以下是我在两台服务器上所做的事情:

服务器 X

sysctl -w net.ipv4.conf.default.rp_filter=0;
ip tunnel add tunx mode gre remote |Y's Main IP| local |X's Main IP| ttl 255 dev eth0;
ip link set tunx up;
ip addr add 10.10.1.1/32 dev tunx peer 10.10.1.2;
ip addr add |One of Y's Additional IPs|/29 dev eth0;

服务器Y

sysctl -w net.ipv4.conf.all.forwarding=1;
sysctl -w net.ipv4.ip_forward=1;
sysctl -w net.ipv4.conf.all.proxy_arp=1;
sysctl -w net.ipv4.conf.eth0.rp_filter=0;
sysctl -w net.ipv4.conf.tun0.rp_filter=0;
ip tunnel add tuny mode gre remote |X's Main IP| local |Y's Main IP| ttl 255 dev eth0;
ip link set tuny up;
ip addr add 10.10.1.2/32 dev tuny;
ip route add |Y's first additional IP|/29 via 10.10.1.2;

在两台服务器上执行上述命令后,当我从 X 尝试以下命令时:

traceroute -s|One of Y's additional IPs| google.com

I get this:

traceroute to google.com (173.194.70.113), 30 hops max, 60 byte packets
 1  * * *
 2  * * *
 3  * * *
 4  * * *
 5  * * *
 6  * * *
 7  * * *
 8  * * *
 9  * * *
10  * * *
11  * * *
12  * * *
13  * * *
14  * * *
15  * * *

答案1

您的设置中至少有两个错误:

  1. ServerX 需要路由规则将流量从 Y1 转发到隧道。
  2. ServerY 上的 tuny 需要一个对等地址。

还对迁移地址使用 /32 路由和掩码来防止路由循环。

让:

  1. ServerX 主 IP = X
  2. ServerY 主 IP = Y
  3. ServerY 附加 IP = Y1

那么我相信以下内容更接近工作配置:

服务器X:

...
ip tunnel add tun0 mode gre remote Y local X ttl 255
ip link   set tun0 up

ip addr add Y1/32 dev eth0
ip addr add 10.10.1.1 dev tun0 peer 10.10.1.2

ip route  add default via 10.10.1.2 dev tun0 table 100
ip rule   add from  Y1 table 100

服务器Y

ip tunnel add tun0 mode gre remote X local Y ttl 255
ip link   set tun0 up

ip addr add 10.10.1.2 dev tun0 peer 10.10.1.1

ip route add Y1/32 via 10.10.1.1 dev tun0

您还可以考虑在 ServerY 上使用单个 GRE 隧道和静态 NAT 进行替代设置,以使 ServerY 上的 IP 地址可用于 ServerX 上的服务。

更新:

我刚刚检查了一下。它似乎有效。

相关 iptables 配置允许流量流动:

服务器Y:

-A FORWARD -d Y1 -o tun0 -j ACCEPT
-A FORWARD -s Y1 -i tun0 -j ACCEPT
-A INPUT -p gre -j ACCEPT

服务器X:

-A INPUT -p gre -j ACCEPT

可以按照以下顺序调试问题:

  1. 确保 X 和 Y 可达。
  2. 确保隧道已启动并正常运行:ping <tunnel-peer-address>
  3. 如果没有,请检查提供商是否允许 GRE 流量。
  4. 跟踪 icmp 数据包如何处理:tcpdump -i tun0 icmptcpdump -i eth0 icmp

好书是“Linux 高级路由和流量控制 HOWTO”。

答案2

为什么不直接从服务器 Y 中删除 IP 地址配置并将其添加到服务器 X 的配置中(这样您就只有一台具有特定 IP 地址的服务器)?

相关内容