# 2026-05-08 17:47:56 by RouterOS 7.21.4
# software id = UETF-WF31
#
# model = CCR2004-16G-2S+
# serial number = HH90A5E8XJF
/interface bridge
add name=climax-bridge
add name=mgmt
/interface ethernet
set [ find default-name=ether1 ] name=ether1-climaxtower
set [ find default-name=ether2 ] l2mtu=9000 rx-flow-control=auto \
    tx-flow-control=auto
set [ find default-name=ether3 ] l2mtu=2024 name=ether3-culleoka-11ghz \
    rx-flow-control=auto tx-flow-control=auto
set [ find default-name=ether4 ] l2mtu=2024 name=ether4-380-airfiber24 \
    rx-flow-control=auto tx-flow-control=auto
set [ find default-name=ether5 ] l2mtu=1580 name=ether5-494 rx-flow-control=\
    auto tx-flow-control=auto
set [ find default-name=ether6 ] l2mtu=2024 name=ether6-verona-11ghz \
    rx-flow-control=auto tx-flow-control=auto
set [ find default-name=ether7 ] l2mtu=9000 name=ether7-switch \
    rx-flow-control=auto tx-flow-control=auto
set [ find default-name=ether8 ] l2mtu=9000 name=ether8-michael \
    rx-flow-control=auto tx-flow-control=auto
set [ find default-name=sfp-sfpplus1 ] auto-negotiation=no rx-flow-control=\
    auto speed=1G-baseX tx-flow-control=auto
/interface vlan
add interface=ether7-switch name=vlan10_ether7 vlan-id=10
add interface=sfp-sfpplus1 name=vlan10_sfp-sfpplus1 vlan-id=10
/ip hotspot user profile
set [ find default=yes ] add-mac-cookie=no on-logout="/ip hotspot host remove \
    [find where address=\94\$address\94 and !authorized and !bypassed]" \
    session-timeout=1h
/ip ipsec proposal
set [ find default=yes ] auth-algorithms=sha256 enc-algorithms=\
    aes-256-cbc,aes-128-cbc pfs-group=modp2048
/ip pool
add name=climaxtower ranges=10.0.102.1-10.0.102.253
add name=dhcp_pool1 ranges=10.100.16.1-10.100.30.254
add name=cgnat ranges=100.64.7.1-100.64.7.250
add name=public-temp ranges=204.110.190.1-204.110.190.99
add name=climax-mgmt ranges=10.10.16.1-10.10.30.254
/ip dhcp-server
add address-pool=climaxtower interface=climax-bridge name=dhcp1
add address-pool=climax-mgmt interface=mgmt lease-script="{\
    \n:local url \"https://xtjlpnubrg.execute-api.us-east-1.amazonaws.com/prod\
    uction/on-start-workflow-execution/6f19a48f-04f7-40c1-a4e0-8cb66df99213/cd\
    c24944-c947-4e01-9c54-07a1653d2e3e\"\
    \n:local url2 \"https://iptrack.vntx.net/api/dhcp\"\
    \n:local max 1\
    \n\
    \n:local attempts 0\
    \n:local success1 0\
    \n:local success2 0\
    \n:do {\
    \n  :set attempts (\$attempts+1);\
    \n  :if (\$leaseBound = 0) do {\
    \n    # Try url2 (iptrack.vntx.net) - deassignment\
    \n    :do {\
    \n      /tool fetch duration=30s mode=https url=\"\$url2\" http-method=pos\
    t http-header-field=\"Content-Type: application/json\" http-data=\"{\\\"bo\
    und\\\":\\\"\$leaseBound\\\",\\\"mac\\\":\\\"\$leaseActMAC\\\",\\\"ip\\\":\
    \\\"\$leaseActIP\\\",\\\"server\\\":\\\"\$leaseServerName\\\"}\"\
    \n      :set success1 1;\
    \n      :log info \"DHCP deassignment successfully sent to iptrack.vntx.ne\
    t for \$leaseActMAC / \$leaseActIP\";\
    \n    } on-error={\
    \n      :log error \"DHCP FAILED to send deassignment to iptrack.vntx.net \
    on attempt \$attempts/\$max for \$leaseActMAC / \$leaseActIP\";\
    \n    }\
    \n\
    \n    # Try url (gaiia) - deassignment\
    \n    :do {\
    \n      /tool fetch duration=30s mode=https url=\"\$url\" http-method=post\
    \_http-header-field=\"Content-Type: application/json\" http-data=\"{\\\"bo\
    und\\\":\\\"\$leaseBound\\\",\\\"mac\\\":\\\"\$leaseActMAC\\\",\\\"ip\\\":\
    \\\"\$leaseActIP\\\",\\\"server\\\":\\\"\$leaseServerName\\\",\\\"remoteId\
    \\\":\\\"\\\"}\"\
    \n      :set success2 1;\
    \n      :log info \"DHCP deassignment successfully sent to gaiia AWS API f\
    or \$leaseActMAC / \$leaseActIP\";\
    \n    } on-error={\
    \n      :log error \"DHCP FAILED to send deassignment to gaiia AWS API on \
    attempt \$attempts/\$max for \$leaseActMAC / \$leaseActIP\";\
    \n    }\
    \n\
    \n    :if (\$success1 != 1 || \$success2 != 1) do={\
    \n      :delay 3s;\
    \n    }\
    \n  } else {\
    \n    :delay 1s;\
    \n    :local remoteID [/ip dhcp-server lease get [find where address=\$lea\
    seActIP] agent-remote-id];\
    \n\
    \n    # Try url2 (iptrack.vntx.net) - assignment\
    \n    :do {\
    \n      /tool fetch duration=30s mode=https url=\"\$url2\" http-method=pos\
    t http-header-field=\"Content-Type: application/json\" http-data=\"{\\\"bo\
    und\\\":\\\"\$leaseBound\\\",\\\"mac\\\":\\\"\$leaseActMAC\\\",\\\"ip\\\":\
    \\\"\$leaseActIP\\\",\\\"server\\\":\\\"\$leaseServerName\\\",\\\"remoteId\
    \\\":\\\"\$remoteID\\\"}\"\
    \n      :set success1 1;\
    \n      :log info \"DHCP assignment successfully sent to iptrack.vntx.net \
    for \$leaseActMAC / \$leaseActIP / \$remoteID\";\
    \n    } on-error={\
    \n      :log error \"DHCP FAILED to send assignment to iptrack.vntx.net on\
    \_attempt \$attempts/\$max for \$leaseActMAC / \$leaseActIP / \$remoteID\"\
    ;\
    \n    }\
    \n\
    \n    # Try url (gaiia) - assignment\
    \n    :do {\
    \n      /tool fetch duration=30s mode=https url=\"\$url\" http-method=post\
    \_http-header-field=\"Content-Type: application/json\" http-data=\"{\\\"bo\
    und\\\":\\\"\$leaseBound\\\",\\\"mac\\\":\\\"\$leaseActMAC\\\",\\\"ip\\\":\
    \\\"\$leaseActIP\\\",\\\"server\\\":\\\"\$leaseServerName\\\",\\\"remoteId\
    \\\":\\\"\$remoteID\\\"}\"\
    \n      :set success2 1;\
    \n      :log info \"DHCP assignment successfully sent to gaiia AWS API for\
    \_\$leaseActMAC / \$leaseActIP / \$remoteID\";\
    \n    } on-error={\
    \n      :log error \"DHCP FAILED to send assignment to gaiia AWS API on at\
    tempt \$attempts/\$max for \$leaseActMAC / \$leaseActIP / \$remoteID\";\
    \n    }\
    \n\
    \n    :if (\$success1 != 1 || \$success2 != 1) do={\
    \n      :delay 30s;\
    \n    }\
    \n  }\
    \n  :if (\$success1 = 1 && \$success2 = 1) do {\
    \n    :set attempts \$max;\
    \n  }\
    \n} while ( \$attempts < \$max )\
    \n}\
    \n" name=climax-mgmt
/ipv6 pool
add name=climax-v6 prefix=2606:1c80:1:2000::/52 prefix-length=64
/ppp profile
add bridge-learning=no change-tcp-mss=yes dns-server=\
    204.110.191.240,204.110.191.20 local-address=cgnat name=pppoe on-down="{\
    \n:local url \"https://xtjlpnubrg.execute-api.us-east-1.amazonaws.com/prod\
    uction/on-start-workflow-execution/6f19a48f-04f7-40c1-a4e0-8cb66df99213/0a\
    7f4443-fc8a-4fe0-807c-f535d2aa1865\"\
    \n:local url2 \"https://iptrack.vntx.net/api/pppoe\"\
    \n:local max 1\
    \n\
    \n:local localAddr \$\"local-address\"\
    \n:local remoteAddr \$\"remote-address\"\
    \n:local callerId \$\"caller-id\"\
    \n:local calledId \$\"called-id\"\
    \n:local interfaceName [/interface get \$interface name]\
    \n\
    \n:local attempts 0\
    \n:local success1 0\
    \n:local success2 0\
    \n:do {\
    \n  :set attempts (\$attempts+1);\
    \n\
    \n  # Try url2 (iptrack.vntx.net)\
    \n  :do {\
    \n    /tool fetch duration=30s mode=https url=\"\$url2\" http-method=post \
    http-header-field=\"Content-Type: application/json\" http-data=\"{\\\"boun\
    d\\\":\\\"0\\\",\\\"username\\\":\\\"\$user\\\",\\\"callingstationid\\\":\
    \\\"\$callerId\\\",\\\"framedip\\\":\\\"\$remoteAddr\\\"}\"\
    \n    :set success1 1;\
    \n    :log info \"PPPoE deassignment successfully sent to iptrack.vntx.net\
    \_for \$user / \$remoteAddr\";\
    \n  } on-error={\
    \n    :log error \"PPPoE FAILED to send deassignment to iptrack.vntx.net o\
    n attempt \$attempts out of \$max for \$user / \$remoteAddr\";\
    \n  }\
    \n\
    \n  # Try url (AWS API)\
    \n  :do {\
    \n    /tool fetch duration=30s mode=https url=\"\$url\" http-method=post h\
    ttp-header-field=\"Content-Type: application/json\" http-data=\"{\\\"bound\
    \\\":\\\"0\\\",\\\"username\\\":\\\"\$user\\\",\\\"callingstationid\\\":\\\
    \"\$callerId\\\",\\\"framedip\\\":\\\"\$remoteAddr\\\"}\"\
    \n    :set success2 1;\
    \n    :log info \"PPPoE deassignment successfully sent to gaiia AWS API fo\
    r \$user / \$remoteAddr\";\
    \n  } on-error={\
    \n    :log error \"PPPoPoE FAILED to send deassignment to gaiia AWS API on\
    \_attempt \$attempts out of \$max for \$user / \$remoteAddr\";\
    \n  }\
    \n\
    \n  :if (\$success1 = 1 && \$success2 = 1) do {\
    \n    :set attempts \$max;\
    \n  } else {\
    \n    :delay 3s;\
    \n  }\
    \n} while ( \$attempts < \$max )\
    \n}\
    \n" on-up="{\
    \n:local url \"https://xtjlpnubrg.execute-api.us-east-1.amazonaws.com/prod\
    uction/on-start-workflow-execution/6f19a48f-04f7-40c1-a4e0-8cb66df99213/0a\
    7f4443-fc8a-4fe0-807c-f535d2aa1865\"\
    \n:local url2 \"https://iptrack.vntx.net/api/pppoe\"\
    \n:local max 5\
    \n\
    \n:local localAddr \$\"local-address\"\
    \n:local remoteAddr \$\"remote-address\"\
    \n:local callerId \$\"caller-id\"\
    \n:local calledId \$\"called-id\"\
    \n:local interfaceName [/interface get \$interface name]\
    \n\
    \n:local attempts 0\
    \n:local success1 0\
    \n:local success2 0\
    \n:do {\
    \n  :set attempts (\$attempts+1);\
    \n\
    \n  # Try url2 (iptrack.vntx.net)\
    \n  :do {\
    \n    /tool fetch duration=30s mode=https url=\"\$url2\" http-method=post \
    http-header-field=\"Content-Type: application/json\" http-data=\"{\\\"boun\
    d\\\":\\\"1\\\",\\\"username\\\":\\\"\$user\\\",\\\"callingstationid\\\":\
    \\\"\$callerId\\\",\\\"framedip\\\":\\\"\$remoteAddr\\\"}\"\
    \n    :set success1 1;\
    \n    :log info \"PPPoE assignment successfully sent to iptrack.vntx.net f\
    or \$user / \$remoteAddr\";\
    \n  } on-error={\
    \n    :log error \"PPPoE FAILED to send assignment to iptrack.vntx.net on \
    attempt \$attempts out of \$max for \$user / \$remoteAddr\";\
    \n  }\
    \n\
    \n  # Try url (gaiia)\
    \n  :do {\
    \n    /tool fetch duration=30s mode=https url=\"\$url\" http-method=post h\
    ttp-header-field=\"Content-Type: application/json\" http-data=\"{\\\"bound\
    \\\":\\\"1\\\",\\\"username\\\":\\\"\$user\\\",\\\"callingstationid\\\":\\\
    \"\$callerId\\\",\\\"framedip\\\":\\\"\$remoteAddr\\\"}\"\
    \n    :set success2 1;\
    \n    :log info \"PPPoE assignment successfully sent to gaiia AWS API for \
    \$user / \$remoteAddr\";\
    \n  } on-error={\
    \n    :log error \"PPPoE FAILED to send assignment to gaiia AWS API on att\
    empt \$attempts out of \$max for \$user / \$remoteAddr\";\
    \n  }\
    \n\
    \n  :if (\$success1 = 1 && \$success2 = 1) do {\
    \n    :set attempts \$max;\
    \n  } else {\
    \n    :delay 3s;\
    \n  }\
    \n} while ( \$attempts < \$max )\
    \n}\
    \n" remote-address=cgnat use-compression=no use-encryption=no use-ipv6=no \
    use-mpls=no use-upnp=no
/queue type
add kind=fq-codel name=fq-codel
/queue interface
set ether1-climaxtower queue=fq-codel
set ether2 queue=fq-codel
set ether3-culleoka-11ghz queue=fq-codel
set ether4-380-airfiber24 queue=fq-codel
set ether5-494 queue=fq-codel
set ether6-verona-11ghz queue=fq-codel
set ether7-switch queue=fq-codel
set ether8-michael queue=fq-codel
set ether9 queue=fq-codel
set ether10 queue=fq-codel
set ether11 queue=fq-codel
set ether12 queue=fq-codel
set ether13 queue=fq-codel
set ether14 queue=fq-codel
set ether15 queue=fq-codel
set ether16 queue=fq-codel
set sfp-sfpplus1 queue=fq-codel
set sfp-sfpplus2 queue=fq-codel
/routing id
add disabled=no id=10.254.254.102 name=id-1 select-dynamic-id=""
/routing ospf instance
add disabled=no in-filter-chain=ospf-in name=default-v2 originate-default=\
    never out-filter-chain=ospf-out redistribute=connected router-id=id-1
add disabled=no in-filter-chain=ospf-in name=default-v3 out-filter-chain=\
    ospf-out redistribute=connected router-id=id-1 version=3
/routing ospf area
add disabled=no instance=default-v2 name=backbone-v2
add disabled=no instance=default-v3 name=backbone-v3
/snmp community
set [ find default=yes ] addresses=204.110.188.0/22,10.0.0.0/8 name=\
    kdyyJrT0Mm
/system logging action
set 0 memory-lines=100
set 1 disk-lines-per-file=100
set 3 remote=204.110.191.251 src-address=10.254.254.102
add name=logs remote=204.110.191.229 src-address=10.254.254.102 target=remote
/interface bridge port
add bridge=climax-bridge ingress-filtering=no interface=ether7-switch \
    internal-path-cost=10 path-cost=10
add bridge=climax-bridge ingress-filtering=no interface=ether8-michael \
    internal-path-cost=10 path-cost=10
add bridge=climax-bridge ingress-filtering=no interface=ether2 \
    internal-path-cost=10 multicast-router=disabled path-cost=10
add bridge=climax-bridge interface=sfp-sfpplus1
add bridge=mgmt interface=vlan10_ether7
add bridge=mgmt interface=vlan10_sfp-sfpplus1
/ip firewall connection tracking
set enabled=yes icmp-timeout=30s tcp-close-wait-timeout=1m \
    tcp-established-timeout=4h tcp-fin-wait-timeout=2m tcp-last-ack-timeout=\
    30s tcp-syn-received-timeout=1m tcp-syn-sent-timeout=2m \
    tcp-time-wait-timeout=2m udp-stream-timeout=2m
/ip neighbor discovery-settings
set discover-interface-list=!dynamic
/ip settings
set max-neighbor-entries=8192 tcp-syncookies=yes
/interface pppoe-server server
add authentication=chap,mschap2 default-profile=pppoe disabled=no interface=\
    climax-bridge max-mru=1492 max-mtu=1492 one-session-per-host=yes \
    service-name=Climax
/ip address
add address=10.0.102.254/24 interface=ether1-climaxtower network=10.0.102.0
add address=10.254.254.102 interface=lo network=10.254.254.102
add address=204.110.188.62/27 interface=climax-bridge network=204.110.188.32
add address=100.64.7.254/22 interface=climax-bridge network=100.64.4.0
add address=10.250.1.14/29 interface=ether3-culleoka-11ghz network=10.250.1.8
add address=10.250.1.30/29 interface=ether6-verona-11ghz network=10.250.1.24
add address=10.250.1.70/29 interface=ether5-494 network=10.250.1.64
add address=10.250.1.94/29 interface=ether4-380-airfiber24 network=\
    10.250.1.88
add address=10.10.31.254/20 interface=mgmt network=10.10.16.0
/ip dhcp-server network
add address=10.0.102.0/24 dns-server=9.9.9.9 gateway=10.0.102.254
add address=10.10.16.0/20 dns-server=204.110.191.240,204.110.191.20 domain=\
    vntx.net gateway=10.10.31.254 ntp-server=204.110.191.19
add address=100.64.4.0/22 dns-server=204.110.191.240,204.110.191.20 domain=\
    vntx.net gateway=100.64.7.254 ntp-server=204.110.191.19
add address=204.110.188.32/27 dns-server=204.110.191.240,204.110.191.20 \
    domain=vntx.net gateway=204.110.188.62 ntp-server=204.110.191.19
/ip dns
set servers=9.9.9.9,1.1.1.1
/ip firewall filter
add action=accept chain=forward comment=\
    "bypass fasttrack for MPLS spine (out)" out-interface=ether5-494
add action=accept chain=forward comment=\
    "bypass fasttrack for MPLS spine (in)" in-interface=ether5-494
add action=accept chain=forward comment=\
    "bypass fasttrack for MPLS spine (out)" out-interface=\
    ether4-380-airfiber24
add action=accept chain=forward comment=\
    "bypass fasttrack for MPLS spine (in)" in-interface=ether4-380-airfiber24
add action=accept chain=forward comment=\
    "bypass fasttrack for MPLS spine (out)" out-interface=ether6-verona-11ghz
add action=accept chain=forward comment=\
    "bypass fasttrack for MPLS spine (in)" in-interface=ether6-verona-11ghz
add action=passthrough chain=unused-hs-chain comment=\
    "place hotspot rules here" disabled=yes
add action=fasttrack-connection chain=forward comment=\
    "fasttrack established/related" connection-state=established,related
add action=accept chain=forward comment="accept established/related" \
    connection-state=established,related
/ip hotspot ip-binding
add address=100.64.7.250 type=bypassed
add address=204.110.188.62 type=bypassed
add address=10.10.0.0/16 type=bypassed
add address=204.110.188.0/24
add address=100.64.0.0/10
add address=204.110.188.32/27
add address=0.0.0.0/0 type=blocked
/ip hotspot profile
add dns-name=climax.vntx.net hotspot-address=10.100.31.254 login-by="" name=\
    hsprof1
/ip ipsec policy
set 0 dst-address=0.0.0.0/0 src-address=0.0.0.0/0
/ip ipsec profile
set [ find default=yes ] dh-group=modp2048 dpd-interval=2m \
    dpd-maximum-failures=5 enc-algorithm=aes-256,aes-128 hash-algorithm=\
    sha256
/ip proxy
set cache-path=web-proxy1 port=23435
/ip proxy access
add src-address=100.64.0.0/10
add src-address=204.110.188.0/22
add src-address=10.0.0.0/8
add action=deny
/ip route
add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=10.250.1.89 \
    pref-src="" routing-table=main scope=30 target-scope=10
add dst-address=204.110.188.224/27 gateway=10.250.1.25
add dst-address=100.64.0.0/22 gateway=10.250.1.25
add dst-address=10.10.0.0/20 gateway=10.250.1.25
add dst-address=10.10.80.0/20 gateway=10.250.1.25
add dst-address=204.110.191.0/27 gateway=10.250.1.25
add dst-address=10.250.1.64/29 gateway=10.250.1.65
add dst-address=10.254.254.111/32 gateway=10.250.1.65
add dst-address=100.64.160.0/20 gateway=10.250.1.65
add dst-address=204.110.188.64/27 gateway=10.250.1.65
add disabled=no dst-address=10.254.254.101/32 gateway=10.250.1.25 \
    routing-table=main
/ip service
set ftp address=204.110.188.0/22,10.0.0.0/8 disabled=yes
set telnet address=204.110.188.0/22,10.0.0.0/8 disabled=yes
set www address=204.110.188.0/22,10.0.0.0/8 disabled=yes port=81
set www-ssl address=204.110.188.0/22,10.0.0.0/8
set ssh address=204.110.188.0/22,10.0.0.0/8,100.64.0.0/10 port=1022
set winbox address=204.110.188.0/22,10.0.0.0/8
set api address=204.110.188.0/22,10.0.0.0/8,100.64.0.0/10
set api-ssl certificate=MyCA
/ip ssh
set host-key-type=ed25519 strong-crypto=yes
/ipv6 address
add address=2606:1c80:0:1010::1 interface=ether6-verona-11ghz
/ipv6 dhcp-relay option
set client_mac value="0x0001\$(CLIENT_MAC)"
/ipv6 nd
set [ find default=yes ] advertise-dns=yes
/mpls interface
add interface=ether6-verona-11ghz mpls-mtu=1508
add interface=ether4-380-airfiber24 mpls-mtu=1508
add interface=ether5-494 mpls-mtu=1508
/mpls ldp
add disabled=no lsr-id=10.254.254.102 transport-addresses=10.254.254.102 vrf=\
    main
/mpls ldp interface
add interface=ether6-verona-11ghz
add interface=ether4-380-airfiber24
add interface=ether5-494
/ppp aaa
set interim-update=1h use-radius=yes
/radius
add address=204.110.191.248 require-message-auth=no service=ppp,hotspot,dhcp \
    src-address=204.110.188.62 timeout=2s
add address=204.110.191.2 require-message-auth=no service=ppp,hotspot,dhcp \
    src-address=204.110.188.62 timeout=2s
/radius incoming
set accept=yes
/routing bfd configuration
add disabled=no interfaces=all min-rx=200ms min-tx=200ms multiplier=5 vrf=\
    main
/routing filter rule
add chain=ospf-in disabled=no rule=accept
add chain=ospf-out disabled=no rule=accept
/routing ospf interface-template
add area=backbone-v3 cost=10 disabled=no use-bfd=no
add area=backbone-v2 auth=sha512 auth-id=1 cost=10 disabled=no interfaces=\
    ether6-verona-11ghz priority=1 type=ptp use-bfd=no
add area=backbone-v2 auth=sha512 auth-id=1 cost=10 disabled=no interfaces=\
    ether5-494 priority=1 type=ptp use-bfd=yes
add area=backbone-v3 auth=sha512 auth-id=1 cost=10 disabled=no interfaces=\
    ether3-culleoka-11ghz priority=1 type=ptp use-bfd=no
add area=backbone-v2 auth=sha512 auth-id=1 cost=10 disabled=no interfaces=\
    ether4-380-airfiber24 priority=1 type=ptp use-bfd=no
/routing ospf static-neighbor
add address=10.250.1.25%ether6-verona-11ghz area=backbone-v2 disabled=no \
    poll-interval=10s
add address=10.250.1.9%ether3-culleoka-11ghz area=backbone-v2 disabled=no \
    poll-interval=10s
/snmp
set contact=graham@vntx.net enabled=yes location="33.187291, -96.448119"
/system clock
set time-zone-autodetect=no time-zone-name=CST6CDT
/system identity
set name=Climax
/system ntp client
set enabled=yes
/system ntp client servers
add address=ntp.vntx.net
add address=0.us.pool.ntp.org
/system package update
set channel=long-term
/system routerboard settings
# Firmware upgraded successfully, please reboot for changes to take effect!
set auto-upgrade=yes enter-setup-on=delete-key
