-
Notifications
You must be signed in to change notification settings - Fork 261
Support different ipv6 network device in network-tunnel-manager.sh #6255
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: feat/operators/ntm-upgrades
Are you sure you want to change the base?
Changes from 7 commits
1ed0de7
86f1307
865707b
f80a464
ca44c49
46eead6
e3f2636
3f2baa5
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -89,10 +89,12 @@ WG_INTERFACE="${WG_INTERFACE:-nymwg}" | |
|
|
||
| # Function to detect and validate uplink interface | ||
| detect_uplink_interface() { | ||
| local cmd="$1" | ||
| local host="$2" | ||
| local ip | ||
| local dev | ||
|
|
||
| dev="$(eval "$cmd" 2>/dev/null | awk '{print $5}' | head -n1 || true)" | ||
| ip="$(getent ahosts${1//-/v} "$host" 2>/dev/null | awk '$2=="STREAM" {print $1}' | head -n1 || true)" | ||
| dev="$(ip $1 -o route get "$ip" 2>/dev/null | awk '{print $5}' || true)" | ||
|
|
||
| if [[ -n "$dev" && "$dev" =~ ^[a-zA-Z0-9._-]+$ ]]; then | ||
| echo "$dev" | ||
|
|
@@ -102,15 +104,20 @@ detect_uplink_interface() { | |
| } | ||
|
|
||
| # uplink device detection, can be overridden | ||
| NETWORK_DEVICE="${NETWORK_DEVICE:-}" | ||
| if [[ -z "$NETWORK_DEVICE" ]]; then | ||
| NETWORK_DEVICE="$(detect_uplink_interface "ip -o route show default")" | ||
| IPV4_UPLINK_DEV="${IPV4_UPLINK_DEV:-}" | ||
| if [[ -z "$IPV4_UPLINK_DEV" ]]; then | ||
| IPV4_UPLINK_DEV="$(detect_uplink_interface -4 "ifconfig.co")" | ||
| fi | ||
| if [[ -z "$NETWORK_DEVICE" ]]; then | ||
| NETWORK_DEVICE="$(detect_uplink_interface "ip -o route show default table all")" | ||
| if [[ -z "$IPV4_UPLINK_DEV" ]]; then | ||
| error "cannot determine ipv4 uplink interface. set IPV4_UPLINK_DEV" | ||
| exit 1 | ||
| fi | ||
| IPV6_UPLINK_DEV="${IPV6_UPLINK_DEV:-}" | ||
| if [[ -z "$IPV6_UPLINK_DEV" ]]; then | ||
| IPV6_UPLINK_DEV="$(detect_uplink_interface -6 "ifconfig.co")" | ||
| fi | ||
| if [[ -z "$NETWORK_DEVICE" ]]; then | ||
| error "cannot determine uplink interface. set NETWORK_DEVICE or UPLINK_DEV" | ||
| if [[ -z "$IPV6_UPLINK_DEV" ]]; then | ||
| error "cannot determine ipv6 uplink interface. set IPV6_UPLINK_DEV" | ||
| exit 1 | ||
| fi | ||
|
|
||
|
|
@@ -194,11 +201,11 @@ fetch_ipv6_address() { | |
|
|
||
| fetch_and_display_ipv6() { | ||
| local ipv6_address | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. did you have time to test this if in case of ip4 and ipv6 devices == it prints the correct stuff?
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yes, I've tested it. See: nonroot@nymExitNode:~$ sudo ./network-tunnel-manager.sh fetch_and_display_ipv6
----- 2025-12-11 01:27:00 START network-tunnel-manager -----
Logs are being saved locally to: /var/log/nym/network_tunnel_manager.log
These logs never leave your machine.
[2025-12-11 01:27:00] COMMAND: fetch_and_display_ipv6 ARGS: fetch_and_display_ipv6
[OK] ipv6 address on eth0.2: 2a07:b944::2:2/128
Logs saved locally at: /var/log/nym/network_tunnel_manager.log
[OK] operation fetch_and_display_ipv6 completed |
||
| ipv6_address=$(ip -6 addr show "$NETWORK_DEVICE" scope global | awk '/inet6/ {print $2}') | ||
| ipv6_address=$(ip -6 addr show "$IPV6_UPLINK_DEV" scope global | awk '/inet6/ {print $2}') | ||
| if [[ -z "$ipv6_address" ]]; then | ||
| error "no global ipv6 address found on $NETWORK_DEVICE" | ||
| error "no global ipv6 address found on $IPV6_UPLINK_DEV" | ||
| else | ||
| ok "ipv6 address on $NETWORK_DEVICE: $ipv6_address" | ||
| ok "ipv6 address on $IPV6_UPLINK_DEV: $ipv6_address" | ||
| fi | ||
| } | ||
|
|
||
|
|
@@ -343,28 +350,31 @@ remove_duplicate_rules() { | |
|
|
||
| apply_iptables_rules() { | ||
| local interface=$1 | ||
| info "applying iptables rules for $interface using uplink $NETWORK_DEVICE" | ||
| info "applying iptables rules for $interface using uplink $IPV4_UPLINK_DEV" | ||
| sleep 1 | ||
|
|
||
| # ipv4 nat and forwarding | ||
| iptables -t nat -C POSTROUTING -o "$NETWORK_DEVICE" -j MASQUERADE 2>/dev/null || \ | ||
| iptables -t nat -A POSTROUTING -o "$NETWORK_DEVICE" -j MASQUERADE | ||
| iptables -t nat -C POSTROUTING -o "$IPV4_UPLINK_DEV" -j MASQUERADE 2>/dev/null || \ | ||
| iptables -t nat -A POSTROUTING -o "$IPV4_UPLINK_DEV" -j MASQUERADE | ||
|
|
||
| iptables -C FORWARD -i "$interface" -o "$NETWORK_DEVICE" -j ACCEPT 2>/dev/null || \ | ||
| iptables -I FORWARD 1 -i "$interface" -o "$NETWORK_DEVICE" -j ACCEPT | ||
| iptables -C FORWARD -i "$interface" -o "$IPV4_UPLINK_DEV" -j ACCEPT 2>/dev/null || \ | ||
| iptables -I FORWARD 1 -i "$interface" -o "$IPV4_UPLINK_DEV" -j ACCEPT | ||
|
|
||
| iptables -C FORWARD -i "$NETWORK_DEVICE" -o "$interface" -m state --state RELATED,ESTABLISHED -j ACCEPT 2>/dev/null || \ | ||
| iptables -I FORWARD 2 -i "$NETWORK_DEVICE" -o "$interface" -m state --state RELATED,ESTABLISHED -j ACCEPT | ||
| iptables -C FORWARD -i "$IPV4_UPLINK_DEV" -o "$interface" -m state --state RELATED,ESTABLISHED -j ACCEPT 2>/dev/null || \ | ||
| iptables -I FORWARD 2 -i "$IPV4_UPLINK_DEV" -o "$interface" -m state --state RELATED,ESTABLISHED -j ACCEPT | ||
|
|
||
| info "applying ip6tables rules for $interface using uplink $IPV6_UPLINK_DEV" | ||
| sleep 1 | ||
|
|
||
| # ipv6 nat and forwarding | ||
| ip6tables -t nat -C POSTROUTING -o "$NETWORK_DEVICE" -j MASQUERADE 2>/dev/null || \ | ||
| ip6tables -t nat -A POSTROUTING -o "$NETWORK_DEVICE" -j MASQUERADE | ||
| ip6tables -t nat -C POSTROUTING -o "$IPV6_UPLINK_DEV" -j MASQUERADE 2>/dev/null || \ | ||
| ip6tables -t nat -A POSTROUTING -o "$IPV6_UPLINK_DEV" -j MASQUERADE | ||
|
|
||
| ip6tables -C FORWARD -i "$interface" -o "$NETWORK_DEVICE" -j ACCEPT 2>/dev/null || \ | ||
| ip6tables -I FORWARD 1 -i "$interface" -o "$NETWORK_DEVICE" -j ACCEPT | ||
| ip6tables -C FORWARD -i "$interface" -o "$IPV6_UPLINK_DEV" -j ACCEPT 2>/dev/null || \ | ||
| ip6tables -I FORWARD 1 -i "$interface" -o "$IPV6_UPLINK_DEV" -j ACCEPT | ||
|
|
||
| ip6tables -C FORWARD -i "$NETWORK_DEVICE" -o "$interface" -m state --state RELATED,ESTABLISHED -j ACCEPT 2>/dev/null || \ | ||
| ip6tables -I FORWARD 2 -i "$NETWORK_DEVICE" -o "$interface" -m state --state RELATED,ESTABLISHED -j ACCEPT | ||
| ip6tables -C FORWARD -i "$IPV6_UPLINK_DEV" -o "$interface" -m state --state RELATED,ESTABLISHED -j ACCEPT 2>/dev/null || \ | ||
| ip6tables -I FORWARD 2 -i "$IPV6_UPLINK_DEV" -o "$interface" -m state --state RELATED,ESTABLISHED -j ACCEPT | ||
|
|
||
| save_iptables_rules | ||
| } | ||
|
|
@@ -539,37 +549,40 @@ create_nym_chain() { | |
| ip6tables -N "$NYM_CHAIN" | ||
| fi | ||
|
|
||
| if ! iptables -C FORWARD -i "$WG_INTERFACE" -o "$NETWORK_DEVICE" -j "$NYM_CHAIN" 2>/dev/null; then | ||
| iptables -I FORWARD 1 -i "$WG_INTERFACE" -o "$NETWORK_DEVICE" -j "$NYM_CHAIN" | ||
| if ! iptables -C FORWARD -i "$WG_INTERFACE" -o "$IPV4_UPLINK_DEV" -j "$NYM_CHAIN" 2>/dev/null; then | ||
| iptables -I FORWARD 1 -i "$WG_INTERFACE" -o "$IPV4_UPLINK_DEV" -j "$NYM_CHAIN" | ||
| fi | ||
|
|
||
| if ! ip6tables -C FORWARD -i "$WG_INTERFACE" -o "$NETWORK_DEVICE" -j "$NYM_CHAIN" 2>/dev/null; then | ||
| ip6tables -I FORWARD 1 -i "$WG_INTERFACE" -o "$NETWORK_DEVICE" -j "$NYM_CHAIN" | ||
| if ! ip6tables -C FORWARD -i "$WG_INTERFACE" -o "$IPV6_UPLINK_DEV" -j "$NYM_CHAIN" 2>/dev/null; then | ||
| ip6tables -I FORWARD 1 -i "$WG_INTERFACE" -o "$IPV6_UPLINK_DEV" -j "$NYM_CHAIN" | ||
| fi | ||
| } | ||
|
|
||
| setup_nat_rules() { | ||
| info "setting up nat and forwarding rules for $WG_INTERFACE via $NETWORK_DEVICE" | ||
| info "setting up ipv4 nat and forwarding rules for $WG_INTERFACE via $IPV4_UPLINK_DEV" | ||
|
|
||
| if ! iptables -t nat -C POSTROUTING -o "$NETWORK_DEVICE" -j MASQUERADE 2>/dev/null; then | ||
| iptables -t nat -A POSTROUTING -o "$NETWORK_DEVICE" -j MASQUERADE | ||
| fi | ||
| if ! ip6tables -t nat -C POSTROUTING -o "$NETWORK_DEVICE" -j MASQUERADE 2>/dev/null; then | ||
| ip6tables -t nat -A POSTROUTING -o "$NETWORK_DEVICE" -j MASQUERADE | ||
| if ! iptables -t nat -C POSTROUTING -o "$IPV4_UPLINK_DEV" -j MASQUERADE 2>/dev/null; then | ||
| iptables -t nat -A POSTROUTING -o "$IPV4_UPLINK_DEV" -j MASQUERADE | ||
| fi | ||
|
|
||
| if ! iptables -C FORWARD -i "$WG_INTERFACE" -o "$NETWORK_DEVICE" -j ACCEPT 2>/dev/null; then | ||
| iptables -I FORWARD 1 -i "$WG_INTERFACE" -o "$NETWORK_DEVICE" -j ACCEPT | ||
| if ! iptables -C FORWARD -i "$WG_INTERFACE" -o "$IPV4_UPLINK_DEV" -j ACCEPT 2>/dev/null; then | ||
| iptables -I FORWARD 1 -i "$WG_INTERFACE" -o "$IPV4_UPLINK_DEV" -j ACCEPT | ||
| fi | ||
| if ! iptables -C FORWARD -i "$IPV4_UPLINK_DEV" -o "$WG_INTERFACE" -m state --state RELATED,ESTABLISHED -j ACCEPT 2>/dev/null; then | ||
| iptables -I FORWARD 2 -i "$IPV4_UPLINK_DEV" -o "$WG_INTERFACE" -m state --state RELATED,ESTABLISHED -j ACCEPT | ||
| fi | ||
| if ! iptables -C FORWARD -i "$NETWORK_DEVICE" -o "$WG_INTERFACE" -m state --state RELATED,ESTABLISHED -j ACCEPT 2>/dev/null; then | ||
| iptables -I FORWARD 2 -i "$NETWORK_DEVICE" -o "$WG_INTERFACE" -m state --state RELATED,ESTABLISHED -j ACCEPT | ||
|
|
||
| info "setting up ipv6 nat and forwarding rules for $WG_INTERFACE via $IPV6_UPLINK_DEV" | ||
|
|
||
| if ! ip6tables -t nat -C POSTROUTING -o "$IPV6_UPLINK_DEV" -j MASQUERADE 2>/dev/null; then | ||
| ip6tables -t nat -A POSTROUTING -o "$IPV6_UPLINK_DEV" -j MASQUERADE | ||
| fi | ||
|
|
||
| if ! ip6tables -C FORWARD -i "$WG_INTERFACE" -o "$NETWORK_DEVICE" -j ACCEPT 2>/dev/null; then | ||
| ip6tables -I FORWARD 1 -i "$WG_INTERFACE" -o "$NETWORK_DEVICE" -j ACCEPT | ||
| if ! ip6tables -C FORWARD -i "$WG_INTERFACE" -o "$IPV6_UPLINK_DEV" -j ACCEPT 2>/dev/null; then | ||
| ip6tables -I FORWARD 1 -i "$WG_INTERFACE" -o "$IPV6_UPLINK_DEV" -j ACCEPT | ||
| fi | ||
| if ! ip6tables -C FORWARD -i "$NETWORK_DEVICE" -o "$WG_INTERFACE" -m state --state RELATED,ESTABLISHED -j ACCEPT 2>/dev/null; then | ||
| ip6tables -I FORWARD 2 -i "$NETWORK_DEVICE" -o "$WG_INTERFACE" -m state --state RELATED,ESTABLISHED -j ACCEPT | ||
| if ! ip6tables -C FORWARD -i "$IPV6_UPLINK_DEV" -o "$WG_INTERFACE" -m state --state RELATED,ESTABLISHED -j ACCEPT 2>/dev/null; then | ||
| ip6tables -I FORWARD 2 -i "$IPV6_UPLINK_DEV" -o "$WG_INTERFACE" -m state --state RELATED,ESTABLISHED -j ACCEPT | ||
| fi | ||
| } | ||
|
|
||
|
|
@@ -772,16 +785,17 @@ clear_exit_policy_rules() { | |
| iptables -F "$NYM_CHAIN" 2>/dev/null || true | ||
| ip6tables -F "$NYM_CHAIN" 2>/dev/null || true | ||
|
|
||
| iptables -D FORWARD -i "$WG_INTERFACE" -o "$NETWORK_DEVICE" -j "$NYM_CHAIN" 2>/dev/null || true | ||
| ip6tables -D FORWARD -i "$WG_INTERFACE" -o "$NETWORK_DEVICE" -j "$NYM_CHAIN" 2>/dev/null || true | ||
| iptables -D FORWARD -i "$WG_INTERFACE" -o "$IPV4_UPLINK_DEV" -j "$NYM_CHAIN" 2>/dev/null || true | ||
| ip6tables -D FORWARD -i "$WG_INTERFACE" -o "$IPV6_UPLINK_DEV" -j "$NYM_CHAIN" 2>/dev/null || true | ||
|
|
||
| iptables -X "$NYM_CHAIN" 2>/dev/null || true | ||
| ip6tables -X "$NYM_CHAIN" 2>/dev/null || true | ||
| } | ||
|
|
||
| show_exit_policy_status() { | ||
| info "nym exit policy status" | ||
| info "network device: $NETWORK_DEVICE" | ||
| info "ipv4 uplink device: $IPV4_UPLINK_DEV" | ||
| info "ipv6 uplink device: $IPV6_UPLINK_DEV" | ||
| info "wireguard interface: $WG_INTERFACE" | ||
| echo | ||
|
|
||
|
|
@@ -1063,15 +1077,15 @@ test_forward_chain_hook() { | |
|
|
||
| local failures=0 | ||
|
|
||
| if iptables -C FORWARD -i "$WG_INTERFACE" -o "$NETWORK_DEVICE" -j "$NYM_CHAIN" 2>/dev/null; then | ||
| ok "ipv4 forward hook ok: -i $WG_INTERFACE -o $NETWORK_DEVICE -> $NYM_CHAIN" | ||
| if iptables -C FORWARD -i "$WG_INTERFACE" -o "$IPV4_UPLINK_DEV" -j "$NYM_CHAIN" 2>/dev/null; then | ||
| ok "ipv4 forward hook ok: -i $WG_INTERFACE -o $IPV4_UPLINK_DEV -> $NYM_CHAIN" | ||
| else | ||
| error "ipv4 forward hook missing or wrong" | ||
| ((failures++)) | ||
| fi | ||
|
|
||
| if ip6tables -C FORWARD -i "$WG_INTERFACE" -o "$NETWORK_DEVICE" -j "$NYM_CHAIN" 2>/dev/null; then | ||
| ok "ipv6 forward hook ok: -i $WG_INTERFACE -o $NETWORK_DEVICE -> $NYM_CHAIN" | ||
| if ip6tables -C FORWARD -i "$WG_INTERFACE" -o "$IPV6_UPLINK_DEV" -j "$NYM_CHAIN" 2>/dev/null; then | ||
| ok "ipv6 forward hook ok: -i $WG_INTERFACE -o $IPV6_UPLINK_DEV -> $NYM_CHAIN" | ||
| else | ||
| error "ipv6 forward hook missing or wrong" | ||
| ((failures++)) | ||
|
|
@@ -1167,7 +1181,8 @@ nym_tunnel_setup() { | |
| } | ||
|
|
||
| exit_policy_install() { | ||
| info "installing nym wireguard exit policy for ${WG_INTERFACE} via ${NETWORK_DEVICE}" | ||
| info "installing nym wireguard ipv4 exit policy for ${WG_INTERFACE} via ${IPV4_UPLINK_DEV}" | ||
| info "installing nym wireguard ipv6 exit policy for ${WG_INTERFACE} via ${IPV6_UPLINK_DEV}" | ||
| exit_policy_install_deps | ||
| adjust_ip_forwarding | ||
| create_nym_chain | ||
|
|
@@ -1309,7 +1324,7 @@ tunnel and nat helpers: | |
| check_nym_wg_tun Inspect forward chain for ${WG_INTERFACE} | ||
| check_nymtun_iptables Inspect forward chain for ${TUNNEL_INTERFACE} | ||
| configure_dns_and_icmp_wg Allow ping and dns ports on this host | ||
| fetch_and_display_ipv6 Show ipv6 on uplink ${NETWORK_DEVICE} | ||
| fetch_and_display_ipv6 Show ipv6 on uplink ${IPV6_UPLINK_DEV} | ||
| fetch_ipv6_address_nym_tun Show global ipv6 address on ${TUNNEL_INTERFACE} | ||
| joke_through_the_mixnet Test via ${TUNNEL_INTERFACE} with joke | ||
| joke_through_wg_tunnel Test via ${WG_INTERFACE} with joke | ||
|
|
@@ -1326,7 +1341,8 @@ exit policy manager: | |
| Run verification tests on exit policy (options: --skip-default-reject). | ||
|
|
||
| environment overrides: | ||
| NETWORK_DEVICE Auto-detected uplink (e.g., eth0). Set manually if detection fails. | ||
| IPV4_UPLINK_DEV Auto-detected ipv4 uplink (e.g., eth0). Set manually if detection fails. | ||
| IPV6_UPLINK_DEV Auto-detected ipv6 uplink (e.g., eth0.1). Set manually if detection fails. | ||
| TUNNEL_INTERFACE Default: nymtun0. Requires root privileges (sudo) to manage. | ||
| WG_INTERFACE Default: nymwg - Must match your WireGuard interface name. | ||
|
|
||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Does this work?
Imo it returns:
getent ahostsv4 "$host"I would expect you want some of this syntax to be returned:Hence smth like:
and later on
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes, it's tested to be working.
It's either
getent ahostsv4orgetent ahostsv6.See: