Code: Select all
0 panopt /root # uname -a
Linux panopt 6.12.31-gentoo-dist-hardened #1 SMP PREEMPT_DYNAMIC Wed Jun 11 00:06:53 -00 2025 x86_64 Intel(R) N150 GenuineIntel GNU/Linux
Code: Select all
0 panopt /root # for C in CONFIG_NF_CONNTRACK CONFIG_INET CONFIG_IP_ADVANCED_ROUTER CONFIG_NETFILTER CONFIG_NETFILTER_ADVANCED CONFIG_IP6_NF_IPTABLES; do
echo checking $C
zgrep "${C}=" /proc/config.gz
echo
done
checking CONFIG_NF_CONNTRACK
CONFIG_NF_CONNTRACK=m
checking CONFIG_INET
CONFIG_INET=y
checking CONFIG_IP_ADVANCED_ROUTER
CONFIG_IP_ADVANCED_ROUTER=y
checking CONFIG_NETFILTER
CONFIG_NETFILTER=y
checking CONFIG_NETFILTER_ADVANCED
CONFIG_NETFILTER_ADVANCED=y
checking CONFIG_IP6_NF_IPTABLES
CONFIG_IP6_NF_IPTABLES=m
Code: Select all
0 panopt /root # sysctl net.ipv4.ip_forward
net.ipv4.ip_forward = 1
0 panopt /root # sysctl net.ipv4.conf.default.rp_filter
net.ipv4.conf.default.rp_filter = 1
Code: Select all
0 panopt /root # nft list ruleset
0 panopt /root #
Code: Select all
0 panopt /root # iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
DOCKER-USER all -- anywhere anywhere
DOCKER-FORWARD all -- anywhere anywhere
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Chain DOCKER (2 references)
target prot opt source destination
ACCEPT tcp -- anywhere 172.18.0.2 tcp dpt:8971
ACCEPT udp -- anywhere 172.18.0.2 udp dpt:8555
ACCEPT tcp -- anywhere 172.18.0.2 tcp dpt:8555
ACCEPT tcp -- anywhere 172.18.0.2 tcp dpt:8554
DROP all -- anywhere anywhere
DROP all -- anywhere anywhere
Chain DOCKER-BRIDGE (1 references)
target prot opt source destination
DOCKER all -- anywhere anywhere
DOCKER all -- anywhere anywhere
Chain DOCKER-CT (1 references)
target prot opt source destination
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
ACCEPT all -- anywhere anywhere ctstate RELATED,ESTABLISHED
Chain DOCKER-FORWARD (1 references)
target prot opt source destination
DOCKER-CT all -- anywhere anywhere
DOCKER-ISOLATION-STAGE-1 all -- anywhere anywhere
DOCKER-BRIDGE all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
ACCEPT all -- anywhere anywhere
Chain DOCKER-ISOLATION-STAGE-1 (1 references)
target prot opt source destination
DOCKER-ISOLATION-STAGE-2 all -- anywhere anywhere
DOCKER-ISOLATION-STAGE-2 all -- anywhere anywhere
Chain DOCKER-ISOLATION-STAGE-2 (2 references)
target prot opt source destination
DROP all -- anywhere anywhere
DROP all -- anywhere anywhere
Chain DOCKER-USER (1 references)
target prot opt source destination
RETURN all -- anywhere anywhere
Code: Select all
0 panopt /root # netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default aperture.intern 0.0.0.0 UG 0 0 0 enp1s0
10.0.0.0 0.0.0.0 255.255.255.0 U 0 0 0 enp1s0
10.0.3.0 0.0.0.0 255.255.255.0 U 0 0 0 br0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-01ee151b7eed
Clients on the camera net (10.0.3.0/24) get correct dhcp and dns information and can resolve names. Packets do not traverse the router. Note: masquerading is not necessary since the border router knows where to send packets for the cam net.
I've set up a NAT router a dozen times and this is driving me nuts.

