我知道这个问题可能已经被问过,但我正在努力按照我想要的方式去做。好的,情况是这样的:
2 个虚拟机
虚拟机A- CentOS(带有两个网络适配器):
外部网卡 - 与主机桥接(为简单起见,我们将其称为“外部A”。启用 DHCP
内部网卡 -“内部A”。静态 IP、DHCPD 服务器配置为仅侦听该接口
虚拟机B-Debian(只有一个网络适配器)
内部网卡 -“内部B”,在一个网络中“内部A”,启用 DHCP,成功从内部 A 接收 IP。
好的,这就是我想要的。因为我不想让 NAT 访问内部网卡,所以有没有办法可以路由所有外部流量通过外部A虚拟机 1 上的网卡?
笔记:
外部A和内部a位于完全不同的子网中。
外部A - 192.168.0.X
内部A - 192.168.135.X
答案1
检查“内部 A”是否有默认网关,“内部 B”是否有相同的默认网关
如果可以的话,删除 nat 表的所有 iptables 规则:
iptables --flush -t nat
虚拟机01
[root@centos01 ~]# route -n | grep enp0s3
0.0.0.0 192.168.0.1 0.0.0.0 UG 100 0 0 enp0s3
192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 enp0s3
VM01 网络配置:
enp0s3: conectado to enp0s3
inet4 192.168.0.41/24
route4 0.0.0.0/0
route4 192.168.0.0/24
enp0s8: conectado to enp0s8
inet4 192.168.135.254/24
route4 192.168.135.0/24
route4 192.168.0.1/32
route4 0.0.0.0/0
虚拟机02
[root@centos02 ~]# route -n | grep enp0s3
0.0.0.0 192.168.135.254 0.0.0.0 UG 100 0 0 enp0s3
192.168.135.0 0.0.0.0 255.255.255.0 U 100 0 0 enp0s3
VM02网络配置:
enp0s3: conectado to enp0s3
inet4 192.168.135.50/24
route4 0.0.0.0/0
route4 192.168.135.0/24
VM01 前向检查:
[root@centos01 ~]# sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
VM01 iptables,让我们插入规则而不是附加它:
iptables -t nat -I PREROUTING --src 192.168.135.0/24 --dst 0/0 -j ACCEPT
iptables -t nat -I POSTROUTING -j MASQUERADE
VM01 iptables 检查:
[root@centos01 ~]# iptables -nL -t nat
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 192.168.135.0/24 0.0.0.0/0
Chain POSTROUTING (policy ACCEPT)
target prot opt source destination
MASQUERADE all -- 0.0.0.0/0 0.0.0.0/0
让我知道它是否有效:)
答案2
我认为这应该有效。在 VM A 上运行
启用 ip 转发(永久)
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
接受来自 192.168.135.x 的流量
iptables -t nat -A PREROUTING --src 192.168.135.0/24 --dst 0/0 -j ACCEPT
NAT 流量
iptables -t nat -A POSTROUTING -j MASQUERADE