KVM的端口转发_ 失效修复

This commit is contained in:
MengMengCode
2026-07-16 20:57:07 +08:00
parent fdd83977fc
commit ae02241370
+28
View File
@@ -252,6 +252,7 @@ func EnsureForwardRules(bridge string) {
if bridge == "" { if bridge == "" {
bridge = "lxcbr0" bridge = "lxcbr0"
} }
ensureLibvirtForwardRules(bridge)
rules := [][]string{ rules := [][]string{
{"-i", bridge, "-j", "ACCEPT"}, {"-i", bridge, "-j", "ACCEPT"},
{"-o", bridge, "-j", "ACCEPT"}, {"-o", bridge, "-j", "ACCEPT"},
@@ -269,6 +270,33 @@ func EnsureForwardRules(bridge string) {
} }
} }
func ensureLibvirtForwardRules(bridge string) {
if bridge != "virbr0" || exec.Command("iptables", "-L", "LIBVIRT_FWI", "-n").Run() != nil {
return
}
rules := []struct {
chain string
args []string
}{
{chain: "LIBVIRT_FWI", args: []string{"-o", bridge, "-j", "ACCEPT"}},
{chain: "LIBVIRT_FWO", args: []string{"-i", bridge, "-j", "ACCEPT"}},
{chain: "LIBVIRT_FWX", args: []string{"-i", bridge, "-o", bridge, "-j", "ACCEPT"}},
}
for _, rule := range rules {
if exec.Command("iptables", "-L", rule.chain, "-n").Run() != nil {
continue
}
for {
deleteArgs := append([]string{"-D", rule.chain}, rule.args...)
if exec.Command("iptables", deleteArgs...).Run() != nil {
break
}
}
insertArgs := append([]string{"-I", rule.chain, "1"}, rule.args...)
exec.Command("iptables", insertArgs...).Run()
}
}
// CleanPortMappings removes all iptables rules for a container // CleanPortMappings removes all iptables rules for a container
func (m *Manager) CleanPortMappings(id int) error { func (m *Manager) CleanPortMappings(id int) error {
tag := clicdTag(id) tag := clicdTag(id)