Skip to content

Instantly share code, notes, and snippets.

@avin
Created May 7, 2024 17:56
Show Gist options
  • Save avin/f772d32c82a678784649edd0c8575d26 to your computer and use it in GitHub Desktop.
Save avin/f772d32c82a678784649edd0c8575d26 to your computer and use it in GitHub Desktop.
Raspberry Pi OpenWRT WireGuard router (+keep vanilla internet on the device)
echo "201 vpn" >> /etc/iproute2/rt_tables

Edit /etc/config/network

config interface 'loopback'
        option device 'lo'
        option proto 'static'
        option ipaddr '127.0.0.1'
        option netmask '255.0.0.0'

config globals 'globals'
        option ula_prefix 'fda6:9245:5afd::/48'

config interface 'lan'
        option device 'eth0'
        option proto 'static'
        option ipaddr '192.168.0.10'
        option netmask '255.255.255.0'
        option gateway '192.168.0.1'
        option dns '8.8.8.8 8.8.4.4'
        option ip6assign '60'

config interface 'vpn'
        option proto 'wireguard'
        option private_key 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
        list addresses '10.10.10.3/24'

config wireguard_vpn 'wgserver'
        option public_key 'yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy'
        option preshared_key 'zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz'
        option endpoint_host '90.90.90.90'
        option endpoint_port '51820'
        option persistent_keepalive '25'
        option route_allowed_ips '0'
        list allowed_ips '0.0.0.0/0'

config route
    option interface 'vpn'
    option target '0.0.0.0'
    option netmask '0.0.0.0'
    option gateway '10.10.10.1'
    option table 'vpn'

config rule
    option in 'lan'
    option src '192.168.0.0/24'
    option lookup 'vpn'

config route
    option interface 'lan'
    option target '0.0.0.0'
    option netmask '0.0.0.0'
    option gateway '192.168.0.1'
    option table 'direct'

config rule
    option in 'lan'
    option src '192.168.0.10/32'
    option lookup 'direct'

Edit /etc/config/firewall

config defaults
        option syn_flood '1'
        option input 'REJECT'
        option output 'ACCEPT'
        option forward 'REJECT'

config zone 'lan'
        option name 'lan'
        list network 'lan'
        option input 'ACCEPT'
        option output 'ACCEPT'
        option forward 'ACCEPT'

config zone 'wan'
        option name 'wan'
        list network 'vpn'
        option input 'ACCEPT'
        option output 'ACCEPT'
        option forward 'REJECT'
        option masq '1'
        option mtu_fix '1'

config forwarding
        option src 'lan'
        option dest 'wan'

config rule
        option name 'Allow-DHCP-Renew'
        option src 'wan'
        option proto 'udp'
        option dest_port '68'
        option target 'ACCEPT'
        option family 'ipv4'

config rule
        option name 'Allow-Ping'
        option src 'wan'
        option proto 'icmp'
        option icmp_type 'echo-request'
        option family 'ipv4'
        option target 'ACCEPT'

config rule
        option name 'Allow-IGMP'
        option src 'wan'
        option proto 'igmp'
        option family 'ipv4'
        option target 'ACCEPT'

config rule
        option name 'Allow-DHCPv6'
        option src 'wan'
        option proto 'udp'
        option dest_port '546'
        option family 'ipv6'
        option target 'ACCEPT'

config rule
        option name 'Allow-MLD'
        option src 'wan'
        option proto 'icmp'
        option src_ip 'fe80::/10'
        list icmp_type '130/0'
        list icmp_type '131/0'
        list icmp_type '132/0'
        list icmp_type '143/0'
        option family 'ipv6'
        option target 'ACCEPT'

config rule
        option name 'Allow-ICMPv6-Input'
        option src 'wan'
        option proto 'icmp'
        list icmp_type 'echo-request'
        list icmp_type 'echo-reply'
        list icmp_type 'destination-unreachable'
        list icmp_type 'packet-too-big'
        list icmp_type 'time-exceeded'
        list icmp_type 'bad-header'
        list icmp_type 'unknown-header-type'
        list icmp_type 'router-solicitation'
        list icmp_type 'neighbour-solicitation'
        list icmp_type 'router-advertisement'
        list icmp_type 'neighbour-advertisement'
        option limit '1000/sec'
        option family 'ipv6'
        option target 'ACCEPT'

config rule
        option name 'Allow-ICMPv6-Forward'
        option src 'wan'
        option dest '*'
        option proto 'icmp'
        list icmp_type 'echo-request'
        list icmp_type 'echo-reply'
        list icmp_type 'destination-unreachable'
        list icmp_type 'packet-too-big'
        list icmp_type 'time-exceeded'
        list icmp_type 'bad-header'
        list icmp_type 'unknown-header-type'
        option limit '1000/sec'
        option family 'ipv6'
        option target 'ACCEPT'

config rule
        option name 'Allow-IPSec-ESP'
        option src 'wan'
        option dest 'lan'
        option proto 'esp'
        option target 'ACCEPT'

config rule
        option name 'Allow-ISAKMP'
        option src 'wan'
        option dest 'lan'
        option dest_port '500'
        option proto 'udp'
        option target 'ACCEPT'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment