Depois de vários ajustes, eu descobri (embora saúdo qualquer comentário que possa explicar por que isso está funcionando). Em primeiro lugar, não ter uma regra POSTROUTING
aparentemente fazia com que o servidor descartasse os pacotes. Examinando as regras iptables
que o Tomato cria através da GUI, criei entradas semelhantes para WANPREROUTING
, wanin
e INPUT
; Eu não tenho certeza porque a regra INPUT
é necessária; talvez ele possa ser removido e o sinalizador -m
possa ser adicionado a wanin
?
iptables -t nat -I WANPREROUTING -i vlan2 -p tcp -m tcp --dport 80 -j DNAT --to-destination {SERVER_IP}:80
iptables -I wanin -d {SERVER_IP} -i vlan2 -p tcp --dport 80 -j ACCEPT
iptables -I INPUT -p tcp -m tcp -i vlan2 --dport 80 -m state --state NEW -j shlimit
A GUI do Tomato não cria as regras POSTROUTING
automaticamente, então eu também tive que fazer isso:
iptables -t nat -I POSTROUTING -p tcp -d {SERVER_IP} --dport 80 -o tun22 \! -s {GATEWAY_IP} -j SNAT --to-source {GATEWAY_IP}
Eu fiz conjuntos de regras como este para as portas 80 e 443, e agora posso acessar o servidor através da VPN a partir da Internet.