diff --git a/wgengine/router/router_linux.go b/wgengine/router/router_linux.go index 710e9cfe0..8a7273bd2 100644 --- a/wgengine/router/router_linux.go +++ b/wgengine/router/router_linux.go @@ -85,41 +85,32 @@ func chooseFireWallMode(logf logger.Logf, det tableDetector) linuxfw.FirewallMod iptAva, nftAva := true, true iptRuleCount, err := det.iptDetect() if err != nil { - logf("router: detect iptables rule: %v", err) + logf("detect iptables rule: %v", err) iptAva = false } nftRuleCount, err := det.nftDetect() if err != nil { - logf("router: detect nftables rule: %v", err) + logf("detect nftables rule: %v", err) nftAva = false } - logf("router: nftables rule count: %d, iptables rule count: %d", nftRuleCount, iptRuleCount) + logf("nftables rule count: %d, iptables rule count: %d", nftRuleCount, iptRuleCount) switch { - case envknob.String("TS_DEBUG_FIREWALL_MODE") == "nftables": - // TODO(KevinLiang10): Updates to a flag - logf("router: envknob TS_DEBUG_FIREWALL_MODE=nftables set") - hostinfo.SetFirewallMode("nft-forced") - return linuxfw.FirewallModeNfTables - case envknob.String("TS_DEBUG_FIREWALL_MODE") == "iptables": - logf("router: envknob TS_DEBUG_FIREWALL_MODE=iptables set") - hostinfo.SetFirewallMode("ipt-forced") - return linuxfw.FirewallModeIPTables case nftRuleCount > 0 && iptRuleCount == 0: - logf("router: nftables is currently in use") + logf("nftables is currently in use") hostinfo.SetFirewallMode("nft-inuse") return linuxfw.FirewallModeNfTables case iptRuleCount > 0 && nftRuleCount == 0: - logf("router: iptables is currently in use") + logf("iptables is currently in use") hostinfo.SetFirewallMode("ipt-inuse") return linuxfw.FirewallModeIPTables case nftAva: // if both iptables and nftables are available but // neither/both are currently used, use nftables. - logf("router: nftables is available") + logf("nftables is available") hostinfo.SetFirewallMode("nft") return linuxfw.FirewallModeNfTables case iptAva: - logf("router: iptables is available") + logf("iptables is available") hostinfo.SetFirewallMode("ipt") return linuxfw.FirewallModeIPTables default: @@ -136,18 +127,44 @@ func chooseFireWallMode(logf logger.Logf, det tableDetector) linuxfw.FirewallMod // As nftables is still experimental, iptables will be used unless TS_DEBUG_USE_NETLINK_NFTABLES is set. func newNetfilterRunner(logf logger.Logf) (netfilterRunner, error) { tableDetector := &linuxFWDetector{} - mode := chooseFireWallMode(logf, tableDetector) + var mode linuxfw.FirewallMode + + // We now use iptables as default and have "auto" and "nftables" as + // options for people to test further. + switch { + case distro.Get() == distro.Gokrazy: + // Reduce startup logging on gokrazy. There's no way to do iptables on + // gokrazy anyway. + logf("GoKrazy should use nftables.") + hostinfo.SetFirewallMode("nft-gokrazy") + mode = linuxfw.FirewallModeNfTables + case envknob.String("TS_DEBUG_FIREWALL_MODE") == "nftables": + logf("envknob TS_DEBUG_FIREWALL_MODE=nftables set") + hostinfo.SetFirewallMode("nft-forced") + mode = linuxfw.FirewallModeNfTables + case envknob.String("TS_DEBUG_FIREWALL_MODE") == "auto": + mode = chooseFireWallMode(logf, tableDetector) + case envknob.String("TS_DEBUG_FIREWALL_MODE") == "iptables": + logf("envknob TS_DEBUG_FIREWALL_MODE=iptables set") + hostinfo.SetFirewallMode("ipt-forced") + mode = linuxfw.FirewallModeIPTables + default: + logf("default choosing iptables") + hostinfo.SetFirewallMode("ipt-default") + mode = linuxfw.FirewallModeIPTables + } + var nfr netfilterRunner var err error switch mode { case linuxfw.FirewallModeIPTables: - logf("router: using iptables") + logf("using iptables") nfr, err = linuxfw.NewIPTablesRunner(logf) if err != nil { return nil, err } case linuxfw.FirewallModeNfTables: - logf("router: using nftables") + logf("using nftables") nfr, err = linuxfw.NewNfTablesRunner(logf) if err != nil { return nil, err