Linux – 两个子网,一个接口,一个网关 – NAT附加子网

Linux – 两个子网,一个接口,一个网关 – NAT附加子网,第1张

概述我们目前有几台服务器都使用相同的局域网: Host1: eth0 10.0.0.1/24Host2: eth0 10.0.0.2/24Host3: eth0 10.0.0.3/24Gateway: 10.0.0.254 我们想在这些服务器上运行一些VM(VirtualBox).我们可以将它们设置为桥接到主机的eth0,但我们不能使用10.0.0.0/24范围内的地址,因为它们将来可能会被分配 我们目前有几台服务器都使用相同的局域网:
Host1: eth0 10.0.0.1/24Host2: eth0 10.0.0.2/24Host3: eth0 10.0.0.3/24Gateway: 10.0.0.254

我们想在这些服务器上运行一些VM(VirtualBox).我们可以将它们设置为桥接到主机的eth0,但我们不能使用10.0.0.0/24范围内的地址,因为它们将来可能会被分配.

所以我们认为我们使用不同的子网

Host1VM: eth0 192.168.0.1/24 (brIDge to host eth0)Host2VM: eth0 192.168.0.2/24 (brIDge to host eth0)Host3VM: eth0 192.168.0.3/24 (brIDge to host eth0)

这很好,并且所有VM都可以相互通信,因为它们位于使用相同物理接口的同一子网上.

我们面临的问题是我们需要通过10.0.0.254网关让这些虚拟机访问互联网.所以我们想到为什么不选择其中一个主机并将其用作路由器/ NAT?

Host1: eth0 10.0.0.1/24,eth0:0 192.168.0.254/24

现在我们可以为VM提供192.168.0.254的网关.我们看到的问题是Host1似乎没有正确的NAT.

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to 10.0.0.1

我认为这样可行,我们确实看到它匹配数据包.如果一个虚拟机Ping互联网,我们看到ICMP数据包进入Host1(因为它是路由器),然后主机重新发送ICMP,因为它是NAT,互联网主机响应主机 – 但随后它死在那里.我希望主机然后将数据包转发回VM,但事实并非如此.

我错过了什么,或者这种设置根本不可能?

编辑:只是为了澄清,我们在iptables中没有DENY规则,一切都是默认的ACCEPT.我们还启用了IP转发.

Update1 – iptables

忽略virbr0 – 与VirtualBox VM无关

# Completed on Fri Sep 20 16:50:45 2013# Generated by iptables-save v1.4.12 on Fri Sep 20 16:50:45 2013*nat:PREROUTING ACCEPT [171383:10358740]:input ACCEPT [1923:115365]:OUTPUT ACCEPT [192:21531]:POSTROUTING ACCEPT [169544:10254463]-A POSTROUTING -s 192.168.0.0/24 -o eth0 -j SNAT --to-source 10.0.0.1COMMIT# Completed on Fri Sep 20 16:50:45 2013# Generated by iptables-save v1.4.12 on Fri Sep 20 16:50:45 2013*filter:input ACCEPT [96628707:25146145432]:FORWARD ACCEPT [195035595:22524430122]:OUTPUT ACCEPT [44035412:304951330498]-A input -i virbr0 -p udp -m udp --dport 53 -j ACCEPT-A input -i virbr0 -p tcp -m tcp --dport 53 -j ACCEPT-A input -i virbr0 -p udp -m udp --dport 67 -j ACCEPT-A input -i virbr0 -p tcp -m tcp --dport 67 -j ACCEPT-A FORWARD -d 192.168.122.0/24 -o virbr0 -m state --state RELATED,ESTABliSHED -j ACCEPT-A FORWARD -s 192.168.122.0/24 -i virbr0 -j ACCEPT-A FORWARD -i virbr0 -o virbr0 -j ACCEPT-A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable-A FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachableCOMMIT# Completed on Fri Sep 20 16:50:45 2013# Generated by iptables-save v1.4.12 on Fri Sep 20 16:50:45 2013*mangle:PREROUTING ACCEPT [291641356:47665886851]:input ACCEPT [96628707:25146145432]:FORWARD ACCEPT [195035595:22524430122]:OUTPUT ACCEPT [44035838:304951365412]:POSTROUTING ACCEPT [239078922:327477732680]-A POSTROUTING -o virbr0 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill-A POSTROUTING -o virbr0 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fillCOMMIT# Completed on Fri Sep 20 16:50:45 2013

更新2 – tcpdump

16:58:37.189758 IP 192.168.0.2 > 74.125.128.106: ICMP echo request,ID 1,seq 2,length 4016:58:37.189805 IP 10.0.0.1 > 74.125.128.106: ICMP echo request,length 4016:58:37.194607 IP 74.125.128.106 > 10.0.0.1: ICMP echo reply,length 40(no final reply back to the VM)
解决方法 这说明了:
16:58:37.189758 IP 192.168.0.2 > 74.125.128.106: ICMP echo request,length 40

上游路由器(10.0.0.254)正在将回复发送回Host1,因此您的路由和SNAT正在运行.问题是Host1没有将该回复传递回192.168.0.0/24网络.

您是否已加载适当的连接跟踪内核模块?

确保流量进入连接跟踪表:

grep src=192.168.0.2 /proc/1/net/nf_conntrack

我在前几天看到了与TCP数据包类似的问题,结果是内核中的rp_filter.我不明白这是怎么回事,但它非常相似.你可以从Host1发布路由表(ip route show)并检查你的rp_filter设置吗? (cat / proc / sys / net / ipv4 / conf / default / rp_filter)

总结

以上是内存溢出为你收集整理的Linux – 两个子网,一个接口,一个网关 – NAT附加子网全部内容,希望文章能够帮你解决Linux – 两个子网,一个接口,一个网关 – NAT附加子网所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1038673.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存