BTW, regarding the WAN/Internet access: normally you'd match both MAC and IP in one rule, like:
Code:
iptables -A FORWARD -i $LAN_IFACE -o $WAN_IFACE \
-s 192.168.1.12 -m mac --mac-source yh:yh:yh:yh:yh:yh -j ACCEPT
but since you don't want to do the static leases, what you could do is have one chain check that the MAC is valid (one of your 20 MACs), and then have another chain check that the IP is from the DHCP range you are using, kinda like:
Code:
iptables -N CHECK
iptables -N CHECK_MAC
iptables -N CHECK_IP
iptables -P FORWARD DROP
iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i $LAN_IFACE -o $WAN_IFACE \
-m state --state NEW -j CHECK
iptables -A CHECK -j CHECK_MAC
iptables -A CHECK -j CHECK_IP
iptables -A CHECK -j ACCEPT
iptables -A CHECK_MAC -m mac --mac-source \
ex:ex:ex:ex:ex:ex -j RETURN
iptables -A CHECK_MAC -m mac --mac-source \
ax:ax:ax:ax:ax:ax -j RETURN
iptables -A CHECK_MAC -m mac --mac-source \
ty:ty:ty:ty:ty:ty -j RETURN
# Etc, etc, etc...
iptables -A CHECK_MAC -j DROP
iptables -A CHECK_IP -m iprange --src-range \
192.168.1.2-192.168.1.17 -j RETURN
iptables -A CHECK_IP -j DROP
iptables -t nat -A POSTROUTING -o $WAN_IFACE -j MASQUERADE