Skip to content

Instantly share code, notes, and snippets.

@Aikhjarto
Created September 14, 2021 11:27
Show Gist options
  • Save Aikhjarto/8be5a9525e667a020ed68c43e6443c05 to your computer and use it in GitHub Desktop.
Save Aikhjarto/8be5a9525e667a020ed68c43e6443c05 to your computer and use it in GitHub Desktop.
Convert dd-wrt's forward_spec to OpenWrt's redirct rules suitable for /etc/network/firewall
"""
Convert dd-wrt's forward_spec from 'nvram get forward_spec' to OpenWrt's
redirect rules suitable for /etc/network/firewall
"""
from io import StringIO
import re
# example forward line taken from 'nvram get forward_spec' on a dd-wrt router
forward_spec=r"https:on:tcp:443>192.168.1.201:443 ssh:on:tcp:22>192.168.1.202:22 ssh2:off:tcp:23>192.168.1.117:22"
def process_forward_spec(forward_spec):
b=StringIO()
for spec in forward_spec.split(' '):
name, enabled, proto, src_port, dst, dst_port = re.split(':|>', spec)
b.write(f'\nconfig redirect\n'
f"\toption target 'DNAT'\n"
f"\toption name '{name}'\n"
f"\tlist proto '{proto}'\n"
f"\toption src 'wan'\n"
f"\toption src_dport '{src_port}'\n"
f"\toption dest 'lan'\n"
f"\toption dest_ip '{dst}'\n"
f"\toption dest_port '{dst_port}'\n")
if not enabled=='on':`
b.write(f"\toption enabled '0'\n")
return b.getvalue()
if __name__=='__main__':
print(process_forward_spec(forward_spec))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment