Merge pull request #11 from outis1one/claude/fix-asterisk-vpn-vlans-01EDsvxAaxvD3NmaSSb1Qzse

Claude/fix asterisk vpn vlans 01 e dsvx aaxv d3 nma s sb1 qzse
This commit is contained in:
outis1one
2025-12-04 11:39:59 -05:00
committed by GitHub
2 changed files with 2859 additions and 33 deletions
+114 -31
View File
@@ -1,6 +1,17 @@
#!/bin/bash #!/bin/bash
# ================================================================ # ================================================================
# Easy Asterisk - Interactive Installer v1.37 # Easy Asterisk - Interactive Installer v1.37.2
#
# CRITICAL FIX in v1.37.2:
# - FIXED: Stasis disabled causing Asterisk to fail on startup
# Stasis is REQUIRED in Asterisk 20.x - was being disabled with ARI/HTTP
# Now only disables optional modules: ari, http, manager, geolocation
#
# BUG FIXES in v1.37.1:
# - FIXED: Function name bug (rebuild_pjsip_config → generate_pjsip_conf)
# - FIXED: Uninstall menu now adapts based on what's installed
# - IMPROVED: Better Asterisk failure diagnostics (shows cert status)
# - IMPROVED: Port forwarding instructions now say "router" not "OPNsense"
# #
# MAJOR UPDATES in v1.37: # MAJOR UPDATES in v1.37:
# - ADDED: VLAN/NAT Traversal toggle (Server Tools menu option 8) # - ADDED: VLAN/NAT Traversal toggle (Server Tools menu option 8)
@@ -41,7 +52,7 @@ PTT_CONFIG_FILE="${CONFIG_DIR}/ptt-device"
CATEGORIES_FILE="${CONFIG_DIR}/categories.conf" CATEGORIES_FILE="${CONFIG_DIR}/categories.conf"
ROOMS_FILE="${CONFIG_DIR}/rooms.conf" ROOMS_FILE="${CONFIG_DIR}/rooms.conf"
COTURN_CONFIG="/etc/turnserver.conf" COTURN_CONFIG="/etc/turnserver.conf"
SCRIPT_VERSION="1.37" SCRIPT_VERSION="1.37.2"
# ================================================================ # ================================================================
# 1. CORE HELPER FUNCTIONS # 1. CORE HELPER FUNCTIONS
@@ -368,7 +379,7 @@ setup_fqdn_access() {
echo " ROUTER PORT FORWARDING REQUIRED" echo " ROUTER PORT FORWARDING REQUIRED"
echo "═══════════════════════════════════════════════════════════════" echo "═══════════════════════════════════════════════════════════════"
echo "" echo ""
echo " On your OPNsense router, create these WAN port forwards:" echo " On your router, configure these port forwards:"
echo "" echo ""
echo " ┌──────────────────┬──────────┬─────────────────────────────┐" echo " ┌──────────────────┬──────────┬─────────────────────────────┐"
echo " │ WAN Port │ Protocol │ Forward To │" echo " │ WAN Port │ Protocol │ Forward To │"
@@ -377,7 +388,7 @@ setup_fqdn_access() {
echo " │ 10000-20000 │ UDP │ ${SERVER_LAN_IP}:10000-20000│" echo " │ 10000-20000 │ UDP │ ${SERVER_LAN_IP}:10000-20000│"
echo " └──────────────────┴──────────┴─────────────────────────────┘" echo " └──────────────────┴──────────┴─────────────────────────────┘"
echo "" echo ""
echo " Path: Firewall → NAT → Port Forward" echo " (Usually found in: Firewall → NAT → Port Forward)"
echo "" echo ""
echo "═══════════════════════════════════════════════════════════════" echo "═══════════════════════════════════════════════════════════════"
echo "" echo ""
@@ -556,7 +567,7 @@ toggle_vlan_nat_traversal() {
print_info "Enabling VLAN/NAT traversal..." print_info "Enabling VLAN/NAT traversal..."
VLAN_NAT_TRAVERSAL="y" VLAN_NAT_TRAVERSAL="y"
save_config save_config
rebuild_pjsip_config generate_pjsip_conf
asterisk -rx "pjsip reload" >/dev/null 2>&1 asterisk -rx "pjsip reload" >/dev/null 2>&1
echo "" echo ""
print_success "VLAN/NAT traversal ENABLED" print_success "VLAN/NAT traversal ENABLED"
@@ -574,7 +585,7 @@ toggle_vlan_nat_traversal() {
if [[ -n "$subnets" ]]; then if [[ -n "$subnets" ]]; then
VLAN_SUBNETS="$subnets" VLAN_SUBNETS="$subnets"
save_config save_config
rebuild_pjsip_config generate_pjsip_conf
asterisk -rx "pjsip reload" >/dev/null 2>&1 asterisk -rx "pjsip reload" >/dev/null 2>&1
print_success "VLAN subnets configured" print_success "VLAN subnets configured"
fi fi
@@ -585,7 +596,7 @@ toggle_vlan_nat_traversal() {
VLAN_NAT_TRAVERSAL="n" VLAN_NAT_TRAVERSAL="n"
VLAN_SUBNETS="" VLAN_SUBNETS=""
save_config save_config
rebuild_pjsip_config generate_pjsip_conf
asterisk -rx "pjsip reload" >/dev/null 2>&1 asterisk -rx "pjsip reload" >/dev/null 2>&1
echo "" echo ""
print_success "VLAN/NAT traversal DISABLED" print_success "VLAN/NAT traversal DISABLED"
@@ -603,7 +614,7 @@ toggle_vlan_nat_traversal() {
save_config save_config
if [[ "$VLAN_NAT_TRAVERSAL" == "y" ]]; then if [[ "$VLAN_NAT_TRAVERSAL" == "y" ]]; then
rebuild_pjsip_config generate_pjsip_conf
asterisk -rx "pjsip reload" >/dev/null 2>&1 asterisk -rx "pjsip reload" >/dev/null 2>&1
print_success "VLAN subnets updated and applied" print_success "VLAN subnets updated and applied"
else else
@@ -1470,10 +1481,17 @@ load => app_page.so
load => pbx_config.so load => pbx_config.so
EOF EOF
for conf in stasis ari http manager geolocation; do # Disable optional modules (NOT stasis - it's required in Asterisk 20.x)
for conf in ari http manager geolocation; do
echo -e "[general]\nenabled = no" > "/etc/asterisk/${conf}.conf" echo -e "[general]\nenabled = no" > "/etc/asterisk/${conf}.conf"
done done
# Configure Stasis properly (required core module)
cat > /etc/asterisk/stasis.conf << EOF
[general]
; Stasis is required for Asterisk 20.x core functionality
EOF
load_config load_config
local ice_config="# ICE disabled - LAN only" local ice_config="# ICE disabled - LAN only"
if [[ "$FQDN_ENABLED" == "y" ]]; then if [[ "$FQDN_ENABLED" == "y" ]]; then
@@ -1683,8 +1701,36 @@ restart_asterisk_safe() {
if systemctl is-active asterisk >/dev/null; then if systemctl is-active asterisk >/dev/null; then
print_success "Asterisk running" print_success "Asterisk running"
else else
print_error "Asterisk failed" print_error "Asterisk failed to start"
journalctl -u asterisk -n 10 --no-pager echo ""
echo "Recent log entries:"
journalctl -u asterisk -n 20 --no-pager
echo ""
echo "Checking configuration files..."
# Check if pjsip.conf has syntax errors
if asterisk -rx "pjsip show version" &>/dev/null; then
echo "PJSIP module OK"
else
echo "PJSIP may have configuration errors"
fi
# Check certificate files
if [[ -f /etc/asterisk/certs/server.crt ]]; then
echo "Certificate file exists"
else
echo "WARNING: Missing /etc/asterisk/certs/server.crt"
fi
if [[ -f /etc/asterisk/certs/server.key ]]; then
echo "Private key exists"
else
echo "WARNING: Missing /etc/asterisk/certs/server.key"
fi
echo ""
echo "To debug further, run: sudo asterisk -cvvv"
echo ""
fi fi
} }
@@ -2075,34 +2121,71 @@ install_baresip_packages() {
uninstall_menu() { uninstall_menu() {
print_header "Uninstall" print_header "Uninstall"
echo " 1) Remove Everything" load_config
echo " 2) Asterisk Only"
echo " 3) Baresip Only" # Build menu based on what's installed
local has_server=$([[ "$INSTALLED_SERVER" == "y" ]] && echo "y" || echo "n")
local has_client=$([[ "$INSTALLED_CLIENT" == "y" ]] && echo "y" || echo "n")
if [[ "$has_server" == "y" && "$has_client" == "y" ]]; then
echo " 1) Remove Everything"
echo " 2) Asterisk Only"
echo " 3) Baresip Only"
elif [[ "$has_server" == "y" ]]; then
echo " 1) Remove Asterisk"
elif [[ "$has_client" == "y" ]]; then
echo " 1) Remove Baresip"
else
print_warn "Nothing installed"
return
fi
echo " 0) Cancel" echo " 0) Cancel"
read -p "Select: " ch read -p "Select: " ch
case $ch in case $ch in
1) 1)
systemctl stop asterisk 2>/dev/null if [[ "$has_server" == "y" && "$has_client" == "y" ]]; then
apt purge -y asterisk* baresip baresip-core 2>/dev/null # Remove everything
rm -rf /etc/asterisk /var/lib/asterisk /etc/easy-asterisk systemctl stop asterisk 2>/dev/null
[[ -n "$KIOSK_USER" ]] && rm -rf "/home/${KIOSK_USER}/.baresip" apt purge -y asterisk* baresip baresip-core 2>/dev/null
systemctl daemon-reload rm -rf /etc/asterisk /var/lib/asterisk /etc/easy-asterisk
print_success "Removed all" [[ -n "$KIOSK_USER" ]] && rm -rf "/home/${KIOSK_USER}/.baresip"
systemctl daemon-reload
print_success "Removed all"
elif [[ "$has_server" == "y" ]]; then
# Remove server only
systemctl stop asterisk 2>/dev/null
apt purge -y asterisk* 2>/dev/null
rm -rf /etc/asterisk /var/lib/asterisk /etc/easy-asterisk
systemctl daemon-reload
print_success "Removed Asterisk"
elif [[ "$has_client" == "y" ]]; then
# Remove client only
apt purge -y baresip baresip-core 2>/dev/null
[[ -n "$KIOSK_USER" ]] && rm -rf "/home/${KIOSK_USER}/.baresip"
rm -rf /etc/easy-asterisk
print_success "Removed Baresip"
fi
;; ;;
2) 2)
systemctl stop asterisk 2>/dev/null if [[ "$has_server" == "y" && "$has_client" == "y" ]]; then
apt purge -y asterisk* 2>/dev/null systemctl stop asterisk 2>/dev/null
rm -rf /etc/asterisk /var/lib/asterisk apt purge -y asterisk* 2>/dev/null
INSTALLED_SERVER="n" rm -rf /etc/asterisk /var/lib/asterisk
save_config INSTALLED_SERVER="n"
print_success "Removed Asterisk" save_config
print_success "Removed Asterisk"
fi
;; ;;
3) 3)
apt purge -y baresip baresip-core 2>/dev/null if [[ "$has_server" == "y" && "$has_client" == "y" ]]; then
[[ -n "$KIOSK_USER" ]] && rm -rf "/home/${KIOSK_USER}/.baresip" apt purge -y baresip baresip-core 2>/dev/null
INSTALLED_CLIENT="n" [[ -n "$KIOSK_USER" ]] && rm -rf "/home/${KIOSK_USER}/.baresip"
save_config INSTALLED_CLIENT="n"
print_success "Removed Baresip" save_config
print_success "Removed Baresip"
fi
;; ;;
esac esac
} }
File diff suppressed because it is too large Load Diff