所以我在 192.168.200.0/24 的私有内部网络中有一个虚拟机,IP 地址为 192.168.200.2。
外网地址为192.168.1.0/24。我想将外部 IP 上的所有流量转发到 192.168.200.2 上的虚拟机。这就是我所做的......
首先,我向接口添加辅助 IP
ip addr add 192.168.1.111 dev eno1
然后我使用这 2 个 iptables 命令来设置 nat
iptables -t nat -A PREROUTING -d 192.168.1.111 -j DNAT --to-destination 192.168.200.2
iptables -t nat -A POSTROUTING -s 192.168.200.2 -j SNAT --to-source 192.168.1.111
这确实有效。我现在可以 ssh 到 192.168.1.111,并且我将位于 IP 为 192.168.200.2 的 kvm 实例中。
但是,我的问题有时是在 ssh 中,我的整个连接都会冻结。当我运行类似top
或 之类的命令时,这种情况总是会发生,systemctl
或者这是锁定整个控制台之前man ip
的输出示例top
top - 19:45:58 up 2 days, 23:56, 3 users, load average: 0.00, 0.00, 0.05
Tasks: 106 total, 1 running, 105 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 3936.3 total, 2479.2 free, 150.1 used, 1307.0 buff/cache
MiB Swap: 0.0 total, 0.0 free, 0.0 used. 3505.6 avail Mem
应该有比这个更多的输出 ^^^ 从这里我不能 ctrl C、ctrl Z 或 q 当我在 中时man
。当我不使用 192.168.1.111 并使用 192.168.200.2 进行连接时,问题就消失了。我知道只有当我使用 192.168.1.111 连接时才会出现这种情况。
问题可能是 MTU 碎片吗?
任何帮助,将不胜感激。
编辑:我刚刚了解到任何超过 1472 的内容ping -s 1472 192.168.1.111
都会被丢弃。
答案1
所以我的问题完全是MTU。主机物理接口上的 mtu 为 1500,虚拟设备上的 mtu 为 1450(这用于 vxlan 封装)。除此之外,主机上的虚拟机的 mtu 为 1500,这导致了整个问题。
修改linux中的mtu
ip link set dev eth0 mtu 1500