Repo Browser

bashcards/bashcards-kali
Card bundle: cards/896572144650--nat-launcher

Front / Back (click to flip)

front
back
Click card to view front/back

Raw Script

#!/usr/bin/env bash
E=$'\033[38;5;46m';R=$'\033[0m';NET="172.16.64.0/24";HIP="172.16.64.64/24";WAN="";LAN="";GW="";MSG="";P="/tmp/bashcards_nat_portal.html";w(){ [[ -n "${1:-}" ]]&&echo "$1"|fold -s -w 60;};b(){ a=("$@");printf "${E}+";printf -- '-%.0s' $(seq 1 60);printf "+${R}\n";for l in "${a[@]}";do w "$l"|while IFS= read -r x;do printf "${E}|${R} %-58s ${E}|${R}\n" "$x";done;done;printf "${E}+";printf -- '-%.0s' $(seq 1 60);printf "+${R}\n";};need(){ command -v "$1" >/dev/null 2>&1;};root(){ [[ "$(id -u)" == "0" ]];};pause(){ echo;read -n1 -s -r -p "SCAN TO CONTINUE...";};autowg(){ need ip||{ MSG="MISSING ip";return 1;};GW="$(ip r s default 2>/dev/null|awk '{print $3}'|head -1)";WAN="$(ip r s default 2>/dev/null|awk '{print $5}'|head -1)";[[ -n "$GW" && -n "$WAN" ]]||{ MSG="NO DEFAULT ROUTE";return 1;};MSG="AUTO WAN=$WAN GW=$GW";};ifaces(){ ip -o link show 2>/dev/null|awk -F': ' '{print $2}'|grep -v '^lo$'||true;};autolan(){ [[ -n "$WAN" ]]||autowg||return 1;LAN="$(ifaces|grep -v "^$WAN$"|head -1||true)";[[ -n "$LAN" ]]||{ MSG="NO LAN CANDIDATE";return 1;};MSG="AUTO LAN=$LAN";};apply(){ need ip&&need iptables&&root||{ MSG="NEED: sudo + ip + iptables";pause;return 1;};[[ -n "$WAN" && -n "$LAN" && -n "$GW" ]]||{ MSG="SET WAN/LAN/GW FIRST";pause;return 1;};ip a flush dev "$LAN" >/dev/null 2>&1||true;ip a add "$HIP" dev "$LAN" >/dev/null 2>&1||{ MSG="FAIL: ip add $HIP dev $LAN";pause;return 1;};ip l set "$LAN" up >/dev/null 2>&1||true;sysctl -w net.ipv4.ip_forward=1 >/dev/null 2>&1||true;iptables -t nat -C POSTROUTING -s "$NET" -o "$WAN" -j MASQUERADE >/dev/null 2>&1||iptables -t nat -A POSTROUTING -s "$NET" -o "$WAN" -j MASQUERADE;iptables -C FORWARD -i "$LAN" -o "$WAN" -s "$NET" -j ACCEPT >/dev/null 2>&1||iptables -A FORWARD -i "$LAN" -o "$WAN" -s "$NET" -j ACCEPT;iptables -C FORWARD -i "$WAN" -o "$LAN" -d "$NET" -m state --state ESTABLISHED,RELATED -j ACCEPT >/dev/null 2>&1||iptables -A FORWARD -i "$WAN" -o "$LAN" -d "$NET" -m state --state ESTABLISHED,RELATED -j ACCEPT;ip r replace default via "$GW" dev "$WAN" >/dev/null 2>&1||true;MSG="APPLIED NAT: $LAN -> $WAN";};clean(){ need iptables&&root||{ MSG="NEED: sudo + iptables";pause;return 1;};iptables -t nat -D POSTROUTING -s "$NET" -o "${WAN:-x}" -j MASQUERADE >/dev/null 2>&1||true;iptables -D FORWARD -i "${LAN:-x}" -o "${WAN:-x}" -s "$NET" -j ACCEPT >/dev/null 2>&1||true;iptables -D FORWARD -i "${WAN:-x}" -o "${LAN:-x}" -d "$NET" -m state --state ESTABLISHED,RELATED -j ACCEPT >/dev/null 2>&1||true;sysctl -w net.ipv4.ip_forward=0 >/dev/null 2>&1||true;MSG="CLEANUP COMPLETE";};testit(){ need ip||{ MSG="MISSING ip";pause;return 1;};LA="$(ip -4 a s "${LAN:-x}" 2>/dev/null|awk '/inet /{print $2}'|head -1||echo none)";PG="$( [[ -n "${GW:-}" ]]&&ping -c1 -W2 "$GW" >/dev/null 2>&1&&echo ok||echo fail )";MSG="LAN=$LA | Ping GW=$PG";pause;};portal(){ need w3m||{ MSG="MISSING w3m";pause;return 1;};FWD="$(sysctl -n net.ipv4.ip_forward 2>/dev/null||echo '?')";cat >"$P"<<EOF
<!doctype html><meta charset=utf-8><title>Bash Cards NAT Portal</title><pre>
Bash Cards NAT Portal
WAN: ${WAN:-<unset>}
LAN: ${LAN:-<unset>}
GW : ${GW:-<unset>}
NET: $NET
HIP: $HIP
Forwarding: $FWD
Last: ${MSG:-}
</pre>
EOF
w3m "$P" || true;MSG="PORTAL CLOSED";};trap 'root&&clean >/dev/null 2>&1||true' INT TERM;while true;do clear;FWD="$(sysctl -n net.ipv4.ip_forward 2>/dev/null||echo '?')";b "Bash.cards NAT LAUNCHER" "STATUS: WAN=${WAN:-<unset>}  LAN=${LAN:-<unset>}  GW=${GW:-<unset>}" "NET=$NET  HIP=$HIP  Forwarding=$FWD" "${MSG:-}";b "SCAN MENU OPTIONS" "1 = Wizard (Auto WAN+GW+LAN then Apply)" "2 = Auto Detect WAN+GW" "3 = Auto Detect LAN" "4 = Apply NAT + Forward" "5 = Test (LAN IP + Ping GW)" "6 = Cleanup (Remove Rules)" "7 = w3m Portal (status page)" "8 = Set NET/HIP" "0 = Exit";read -p "ENTER NUMBER: " x;case "${x:0:1}" in 1)autowg&&autolan&&apply||true;;2)autowg||true;;3)autolan||true;;4)apply||true;;5)testit||true;;6)clean||true;;7)portal||true;;8)read -p "LAN NET CIDR [$NET]: " n;read -p "HOST IP CIDR [$HIP]: " h;[[ -n "${n:-}" ]]&&NET="$n";[[ -n "${h:-}" ]]&&HIP="$h";MSG="UPDATED NET/HIP";;0)clear;b "MODULE EXITED — COMPLETE";break;;*)MSG="INVALID NUMBER";pause;;esac;done

QR Payload

bash -c "$(echo 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 | base64 -d | gunzip)"
cards/896572144650--nat-launcher/README.md
# Bash Card — 896572144650--nat-launcher

![Front](assets/front-thumb.png)  ![Back](assets/back-thumb.png)

Created: 2025-12-24 16:58:37 UTC
- Serial Number: 896572144650--nat-launcher
- Author: shoes
- Pipe mode: gzipb64
- Description:
  > Artifact — Network Enchantment
  > 
  > • Real-World Effect — Configures NAT and IP forwarding on a Linux system to enable LAN-to-WAN internet access with automatic interface detection and firewall rules.
  > 
  > • Card Ability — When NAT enters the battlefield, until end of turn, permanents you control can share abilities.
  > 
  > "Worlds unseen, weaving paths through networks."

Assets:
- assets/front.png / assets/back.png
- assets/front-thumb.png
- assets/back-thumb.png
- assets/auto-art.png (generated)
- assets/front-data-url.txt / assets/back-data-url.txt
- assets/raw.sh (source script you authored)
- assets/qr-payload.txt (what the QR encodes)

Auto Art (250x250):
<img src="assets/auto-art.png" width="250" height="250" alt="Auto art preview" />
NameTypeSize
README.mdfile1,015
assetsdir