Gateway Topology Testing
In addition to simple single-namespace testing, NSE supports Gateway Topologies for testing router, NAT, and forwarding firewall rulesets.
Topology Architecture
A Gateway topology spawns two interconnected network namespaces:
- Router Netns (
nse_router_<id>): Receives packets onveth_router_hostand forwards them toveth_router_server. - Server Netns (
nse_server_<id>): Houses background mock listeners and target endpoints.
graph LR
Host[Host / Scapy Injector] -->|vhr-*| Router[Router Netns]
Router -->|vrs-*| Server[Server Netns]
YAML Gateway Example
tests:
- name: "Router Forwarding Allow Port 53 UDP"
topology: gateway
rules: |
table ip filter {
chain forward {
type filter hook forward priority 0; policy drop;
udp dport 53 accept
}
}
mock_listeners:
- protocol: udp
port: 53
packets:
- protocol: udp
src_ip: 10.0.1.1
dst_ip: 10.0.2.2
dst_port: 53
- protocol: udp
src_ip: 10.0.1.1
dst_ip: 10.0.2.2
dst_port: 54
expected_verdicts:
- ACCEPT
- DROP
Programmatic Gateway Usage
from nse.models.test_request import TestRequest, TopologyType, PacketSpec
from nse.core.pipeline import run_test_pipeline
request = TestRequest(
topology=TopologyType.GATEWAY,
rules="""
table ip filter {
chain forward {
type filter hook forward priority 0; policy drop;
ip daddr 10.0.2.2 udp dport 53 accept
}
}
""",
packets=[
PacketSpec(protocol="udp", src_ip="10.0.1.1", dst_ip="10.0.2.2", dst_port=53)
]
)
events = await run_test_pipeline(request=request)