{"record":{"id":"c482cd8611ca4408","repo":"tailscale/tailscale","slug":"path-not-found-w","errorCode":null,"errorMessage":"path not found: %w","messagePattern":"path not found: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"util/linuxfw/iptables_runner.go","lineNumber":51,"sourceCode":"\tList(table, chain string) ([]string, error)\n\tClearChain(table, chain string) error\n\tNewChain(table, chain string) error\n\tDeleteChain(table, chain string) error\n}\n\ntype iptablesRunner struct {\n\tipt4 iptablesInterface\n\tipt6 iptablesInterface\n\n\tv6Available       bool\n\tv6NATAvailable    bool\n\tv6FilterAvailable bool\n}\n\nfunc checkIP6TablesExists() error {\n\t// Some distros ship ip6tables separately from iptables.\n\tif _, err := exec.LookPath(\"ip6tables\"); err != nil {\n\t\treturn fmt.Errorf(\"path not found: %w\", err)\n\t}\n\treturn nil\n}\n\n// HasIPV6 reports true if the system supports IPv6.\nfunc (i *iptablesRunner) HasIPV6() bool {\n\treturn i.v6Available\n}\n\n// HasIPV6Filter reports true if the system supports ip6tables filter table.\nfunc (i *iptablesRunner) HasIPV6Filter() bool {\n\treturn i.v6FilterAvailable\n}\n\n// HasIPV6NAT reports true if the system supports IPv6 NAT.\nfunc (i *iptablesRunner) HasIPV6NAT() bool {\n\treturn i.v6NATAvailable\n}","sourceCodeStart":33,"sourceCodeEnd":69,"githubUrl":"https://github.com/tailscale/tailscale/blob/6e0912f97994f927632b34ae9e63b53d6516a6ac/util/linuxfw/iptables_runner.go#L33-L69","documentation":"checkIP6TablesExists wraps exec.LookPath's failure to find an ip6tables binary anywhere on PATH. Some distros package ip6tables separately from iptables; without it, IPv6 firewall management is impossible and the runner is constructed without v6 support.","triggerScenarios":"Thrown at util/linuxfw/iptables_runner.go:51 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Install the ip6tables package (e.g. iptables-ipv6 / nftables-compatible package) on the host","If IPv6 is intentionally unsupported, let newIPTablesRunner proceed with v6 disabled — callers treat this as advisory","Verify PATH inside containers includes /usr/sbin where iptables tools often live"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"6e0912f97994f927632b34ae9e63b53d6516a6ac","analyzedAt":"2026-08-18T08:17:25.280Z","contentChangedAt":"2026-08-18T08:17:25.280Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}