如何让一个OpenStack实例将路由转发到另一台不是OpenStack实例但在同一局域网中的Linux机器?
PC_A has 192.168.1.133/27.
PC_B has 192.168.1.140/27.
PC_A has 10.26.14.16/25 route.
PC_B has no 10.26.14.16/25 route.
我希望 PC_B 通过 PC_A 到达10.26.14.16/25
。
注意:PC_B 是一个 OpenStack 实例。它的私有IP是192.168.118.10/27,公共IP是192.168.1.140/27。
FW----------PC_A--------------PC_B
[192.168.1.133/27] [192.168.1.140/27] Public IP of B
[192.168.118.10/27] Private IP of B
PC_A有10.26.14.16/25
路由。 PC_B没有10.26.14.16/25
路由。我希望 PC_B 通过 PC_A 到达10.26.14.16/25
。
答案1
如果 PC_B 无法直接访问 192.168.1.* 网络,则需要将缺少的路由添加到 OpenStack 网络设置中,而不是添加到 PC_B 中。
答案2
看起来很容易,但事实并非如此。相信我!
服务器端配置[PC_A]
[PC_A ~]# nano /etc/sysctl.conf
net.ipv4.ip_forward = 1
[PC_A ~]# iptables -t nat -A POSTROUTING ! -d 192.168.1.127/27 -o ens160 -j MASQUERADE
客户端配置 [PC_B]
PC_B 是 Openstack 的一个实例。它的私有 IP 是192.168.118.10/27
,公共 IP 是192.168.1.140/27
。
问题:
[PC_B ~]$ sudo route add default gw 192.168.1.133 eth0
SIOCADDRT: Network is unreachable
[PC_B ~]$ route
default host-192-168-10 0.0.0.0 UG 0 0 0 eth0
192.168.118.0 0.0.0.0 255.255.255.240 U 0 0 0 eth0
为什么SIOCADDRT: Network is unreachable
?正如我已经提到的,PC_B 的公共 IP 是192.168.1.140/27
[OpenStack 实例],其私有 IP 是192.168.118.10/27
。