@@ -103,6 +103,7 @@ detect_uplink_interface() {
103103
104104# uplink device detection, can be overridden
105105NETWORK_DEVICE=" ${NETWORK_DEVICE:- } "
106+ NETWORK_DEVICE_IPV6=" ${NETWORK_DEVICE_IPV6:- $NETWORK_DEVICE } "
106107if [[ -z " $NETWORK_DEVICE " ]]; then
107108 NETWORK_DEVICE=" $( detect_uplink_interface " ip -o route show default" ) "
108109fi
@@ -113,6 +114,15 @@ if [[ -z "$NETWORK_DEVICE" ]]; then
113114 error " cannot determine uplink interface. set NETWORK_DEVICE or UPLINK_DEV"
114115 exit 1
115116fi
117+ if [[ -z " $NETWORK_DEVICE_IPV6 " ]]; then
118+ NETWORK_DEVICE_IPV6=$( detect_uplink_interface " ip -6 -o route show default" )
119+ fi
120+ if [[ -z " $NETWORK_DEVICE_IPV6 " ]]; then
121+ NETWORK_DEVICE_IPV6=$( detect_uplink_interface " ip -6 -o route show default table all" )
122+ fi
123+ if [[ -z " $NETWORK_DEVICE_IPV6 " ]]; then
124+ NETWORK_DEVICE_IPV6=" $NETWORK_DEVICE "
125+ fi
116126
117127# ##############################################################################
118128# shared helpers
@@ -194,11 +204,11 @@ fetch_ipv6_address() {
194204
195205fetch_and_display_ipv6 () {
196206 local ipv6_address
197- ipv6_address=$( ip -6 addr show " $NETWORK_DEVICE " scope global | awk ' /inet6/ {print $2}' )
207+ ipv6_address=$( ip -6 addr show " $NETWORK_DEVICE_IPV6 " scope global | awk ' /inet6/ {print $2}' )
198208 if [[ -z " $ipv6_address " ]]; then
199- error " no global ipv6 address found on $NETWORK_DEVICE "
209+ error " no global ipv6 address found on $NETWORK_DEVICE_IPV6 "
200210 else
201- ok " ipv6 address on $NETWORK_DEVICE : $ipv6_address "
211+ ok " ipv6 address on $NETWORK_DEVICE_IPV6 : $ipv6_address "
202212 fi
203213}
204214
@@ -343,7 +353,7 @@ remove_duplicate_rules() {
343353
344354apply_iptables_rules () {
345355 local interface=$1
346- info " applying iptables rules for $interface using uplink $NETWORK_DEVICE "
356+ info " applying iptables rules for $interface using uplink (v4: $NETWORK_DEVICE , v6: $NETWORK_DEVICE_IPV6 ) "
347357 sleep 1
348358
349359 # ipv4 nat and forwarding
@@ -357,14 +367,14 @@ apply_iptables_rules() {
357367 iptables -I FORWARD 2 -i " $NETWORK_DEVICE " -o " $interface " -m state --state RELATED,ESTABLISHED -j ACCEPT
358368
359369 # ipv6 nat and forwarding
360- ip6tables -t nat -C POSTROUTING -o " $NETWORK_DEVICE " -j MASQUERADE 2> /dev/null || \
361- ip6tables -t nat -A POSTROUTING -o " $NETWORK_DEVICE " -j MASQUERADE
370+ ip6tables -t nat -C POSTROUTING -o " $NETWORK_DEVICE_IPV6 " -j MASQUERADE 2> /dev/null || \
371+ ip6tables -t nat -A POSTROUTING -o " $NETWORK_DEVICE_IPV6 " -j MASQUERADE
362372
363- ip6tables -C FORWARD -i " $interface " -o " $NETWORK_DEVICE " -j ACCEPT 2> /dev/null || \
364- ip6tables -I FORWARD 1 -i " $interface " -o " $NETWORK_DEVICE " -j ACCEPT
373+ ip6tables -C FORWARD -i " $interface " -o " $NETWORK_DEVICE_IPV6 " -j ACCEPT 2> /dev/null || \
374+ ip6tables -I FORWARD 1 -i " $interface " -o " $NETWORK_DEVICE_IPV6 " -j ACCEPT
365375
366- ip6tables -C FORWARD -i " $NETWORK_DEVICE " -o " $interface " -m state --state RELATED,ESTABLISHED -j ACCEPT 2> /dev/null || \
367- ip6tables -I FORWARD 2 -i " $NETWORK_DEVICE " -o " $interface " -m state --state RELATED,ESTABLISHED -j ACCEPT
376+ ip6tables -C FORWARD -i " $NETWORK_DEVICE_IPV6 " -o " $interface " -m state --state RELATED,ESTABLISHED -j ACCEPT 2> /dev/null || \
377+ ip6tables -I FORWARD 2 -i " $NETWORK_DEVICE_IPV6 " -o " $interface " -m state --state RELATED,ESTABLISHED -j ACCEPT
368378
369379 save_iptables_rules
370380}
@@ -543,19 +553,19 @@ create_nym_chain() {
543553 iptables -I FORWARD 1 -i " $WG_INTERFACE " -o " $NETWORK_DEVICE " -j " $NYM_CHAIN "
544554 fi
545555
546- if ! ip6tables -C FORWARD -i " $WG_INTERFACE " -o " $NETWORK_DEVICE " -j " $NYM_CHAIN " 2> /dev/null; then
547- ip6tables -I FORWARD 1 -i " $WG_INTERFACE " -o " $NETWORK_DEVICE " -j " $NYM_CHAIN "
556+ if ! ip6tables -C FORWARD -i " $WG_INTERFACE " -o " $NETWORK_DEVICE_IPV6 " -j " $NYM_CHAIN " 2> /dev/null; then
557+ ip6tables -I FORWARD 1 -i " $WG_INTERFACE " -o " $NETWORK_DEVICE_IPV6 " -j " $NYM_CHAIN "
548558 fi
549559}
550560
551561setup_nat_rules () {
552- info " setting up nat and forwarding rules for $WG_INTERFACE via $NETWORK_DEVICE "
562+ info " setting up nat and forwarding rules for $WG_INTERFACE via (v4: $NETWORK_DEVICE , v6: $NETWORK_DEVICE_IPV6 ) "
553563
554564 if ! iptables -t nat -C POSTROUTING -o " $NETWORK_DEVICE " -j MASQUERADE 2> /dev/null; then
555565 iptables -t nat -A POSTROUTING -o " $NETWORK_DEVICE " -j MASQUERADE
556566 fi
557- if ! ip6tables -t nat -C POSTROUTING -o " $NETWORK_DEVICE " -j MASQUERADE 2> /dev/null; then
558- ip6tables -t nat -A POSTROUTING -o " $NETWORK_DEVICE " -j MASQUERADE
567+ if ! ip6tables -t nat -C POSTROUTING -o " $NETWORK_DEVICE_IPV6 " -j MASQUERADE 2> /dev/null; then
568+ ip6tables -t nat -A POSTROUTING -o " $NETWORK_DEVICE_IPV6 " -j MASQUERADE
559569 fi
560570
561571 if ! iptables -C FORWARD -i " $WG_INTERFACE " -o " $NETWORK_DEVICE " -j ACCEPT 2> /dev/null; then
@@ -565,11 +575,12 @@ setup_nat_rules() {
565575 iptables -I FORWARD 2 -i " $NETWORK_DEVICE " -o " $WG_INTERFACE " -m state --state RELATED,ESTABLISHED -j ACCEPT
566576 fi
567577
568- if ! ip6tables -C FORWARD -i " $WG_INTERFACE " -o " $NETWORK_DEVICE " -j ACCEPT 2> /dev/null; then
569- ip6tables -I FORWARD 1 -i " $WG_INTERFACE " -o " $NETWORK_DEVICE " -j ACCEPT
578+ if ! ip6tables -C FORWARD -i " $WG_INTERFACE " -o " $NETWORK_DEVICE_IPV6 " -j ACCEPT 2> /dev/null; then
579+ ip6tables -I FORWARD 1 -i " $WG_INTERFACE " -o " $NETWORK_DEVICE_IPV6 " -j ACCEPT
570580 fi
571- if ! ip6tables -C FORWARD -i " $NETWORK_DEVICE " -o " $WG_INTERFACE " -m state --state RELATED,ESTABLISHED -j ACCEPT 2> /dev/null; then
572- ip6tables -I FORWARD 2 -i " $NETWORK_DEVICE " -o " $WG_INTERFACE " -m state --state RELATED,ESTABLISHED -j ACCEPT
581+
582+ if ! ip6tables -C FORWARD -i " $NETWORK_DEVICE_IPV6 " -o " $WG_INTERFACE " -m state --state RELATED,ESTABLISHED -j ACCEPT 2> /dev/null; then
583+ ip6tables -I FORWARD 2 -i " $NETWORK_DEVICE_IPV6 " -o " $WG_INTERFACE " -m state --state RELATED,ESTABLISHED -j ACCEPT
573584 fi
574585}
575586
@@ -772,16 +783,16 @@ clear_exit_policy_rules() {
772783 iptables -F " $NYM_CHAIN " 2> /dev/null || true
773784 ip6tables -F " $NYM_CHAIN " 2> /dev/null || true
774785
775- iptables -D FORWARD -i " $WG_INTERFACE " -o " $NETWORK_DEVICE " -j " $NYM_CHAIN " 2> /dev/null || true
776- ip6tables -D FORWARD -i " $WG_INTERFACE " -o " $NETWORK_DEVICE " -j " $NYM_CHAIN " 2> /dev/null || true
786+ iptables -D FORWARD -i " $WG_INTERFACE " -o " $NETWORK_DEVICE_ " -j " $NYM_CHAIN " 2> /dev/null || true
787+ ip6tables -D FORWARD -i " $WG_INTERFACE " -o " $NETWORK_DEVICE_IPV6 " -j " $NYM_CHAIN " 2> /dev/null || true
777788
778789 iptables -X " $NYM_CHAIN " 2> /dev/null || true
779790 ip6tables -X " $NYM_CHAIN " 2> /dev/null || true
780791}
781792
782793show_exit_policy_status () {
783794 info " nym exit policy status"
784- info " network device: $NETWORK_DEVICE "
795+ info " network device: (v4: $NETWORK_DEVICE , v6: $NETWORK_DEVICE_IPV6 ) "
785796 info " wireguard interface: $WG_INTERFACE "
786797 echo
787798
@@ -1070,8 +1081,8 @@ test_forward_chain_hook() {
10701081 (( failures++ ))
10711082 fi
10721083
1073- if ip6tables -C FORWARD -i " $WG_INTERFACE " -o " $NETWORK_DEVICE " -j " $NYM_CHAIN " 2> /dev/null; then
1074- ok " ipv6 forward hook ok: -i $WG_INTERFACE -o $NETWORK_DEVICE -> $NYM_CHAIN "
1084+ if ip6tables -C FORWARD -i " $WG_INTERFACE " -o " $NETWORK_DEVICE_IPV6 " -j " $NYM_CHAIN " 2> /dev/null; then
1085+ ok " ipv6 forward hook ok: -i $WG_INTERFACE -o $NETWORK_DEVICE_IPV6 -> $NYM_CHAIN "
10751086 else
10761087 error " ipv6 forward hook missing or wrong"
10771088 (( failures++ ))
@@ -1167,7 +1178,7 @@ nym_tunnel_setup() {
11671178}
11681179
11691180exit_policy_install () {
1170- info " installing nym wireguard exit policy for ${WG_INTERFACE} via ${NETWORK_DEVICE} "
1181+ info " installing nym wireguard exit policy for ${WG_INTERFACE} via (v4: ${NETWORK_DEVICE} , v6: ${NETWORK_DEVICE_IPV6} ) "
11711182 exit_policy_install_deps
11721183 adjust_ip_forwarding
11731184 create_nym_chain
@@ -1309,7 +1320,7 @@ tunnel and nat helpers:
13091320 check_nym_wg_tun Inspect forward chain for ${WG_INTERFACE}
13101321 check_nymtun_iptables Inspect forward chain for ${TUNNEL_INTERFACE}
13111322 configure_dns_and_icmp_wg Allow ping and dns ports on this host
1312- fetch_and_display_ipv6 Show ipv6 on uplink ${NETWORK_DEVICE }
1323+ fetch_and_display_ipv6 Show ipv6 on uplink ${NETWORK_DEVICE_IPV6 }
13131324 fetch_ipv6_address_nym_tun Show global ipv6 address on ${TUNNEL_INTERFACE}
13141325 joke_through_the_mixnet Test via ${TUNNEL_INTERFACE} with joke
13151326 joke_through_wg_tunnel Test via ${WG_INTERFACE} with joke
@@ -1327,7 +1338,7 @@ exit policy manager:
13271338
13281339environment overrides:
13291340 NETWORK_DEVICE Auto-detected uplink (e.g., eth0). Set manually if detection fails.
1330- TUNNEL_INTERFACE Default: nymtun0. Requires root privileges (sudo) to manage .
1341+ NETWORK_DEVICE_IPV6 Auto-detected uplink for IPv6 (e.g., eth0). Defaults to NETWORK_DEVICE if not set .
13311342 WG_INTERFACE Default: nymwg - Must match your WireGuard interface name.
13321343
13331344EOF
0 commit comments