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:
@@ -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"
|
||||||
|
load_config
|
||||||
|
|
||||||
|
# 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 " 1) Remove Everything"
|
||||||
echo " 2) Asterisk Only"
|
echo " 2) Asterisk Only"
|
||||||
echo " 3) Baresip 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)
|
||||||
|
if [[ "$has_server" == "y" && "$has_client" == "y" ]]; then
|
||||||
|
# Remove everything
|
||||||
systemctl stop asterisk 2>/dev/null
|
systemctl stop asterisk 2>/dev/null
|
||||||
apt purge -y asterisk* baresip baresip-core 2>/dev/null
|
apt purge -y asterisk* baresip baresip-core 2>/dev/null
|
||||||
rm -rf /etc/asterisk /var/lib/asterisk /etc/easy-asterisk
|
rm -rf /etc/asterisk /var/lib/asterisk /etc/easy-asterisk
|
||||||
[[ -n "$KIOSK_USER" ]] && rm -rf "/home/${KIOSK_USER}/.baresip"
|
[[ -n "$KIOSK_USER" ]] && rm -rf "/home/${KIOSK_USER}/.baresip"
|
||||||
systemctl daemon-reload
|
systemctl daemon-reload
|
||||||
print_success "Removed all"
|
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)
|
||||||
|
if [[ "$has_server" == "y" && "$has_client" == "y" ]]; then
|
||||||
systemctl stop asterisk 2>/dev/null
|
systemctl stop asterisk 2>/dev/null
|
||||||
apt purge -y asterisk* 2>/dev/null
|
apt purge -y asterisk* 2>/dev/null
|
||||||
rm -rf /etc/asterisk /var/lib/asterisk
|
rm -rf /etc/asterisk /var/lib/asterisk
|
||||||
INSTALLED_SERVER="n"
|
INSTALLED_SERVER="n"
|
||||||
save_config
|
save_config
|
||||||
print_success "Removed Asterisk"
|
print_success "Removed Asterisk"
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
3)
|
3)
|
||||||
|
if [[ "$has_server" == "y" && "$has_client" == "y" ]]; then
|
||||||
apt purge -y baresip baresip-core 2>/dev/null
|
apt purge -y baresip baresip-core 2>/dev/null
|
||||||
[[ -n "$KIOSK_USER" ]] && rm -rf "/home/${KIOSK_USER}/.baresip"
|
[[ -n "$KIOSK_USER" ]] && rm -rf "/home/${KIOSK_USER}/.baresip"
|
||||||
INSTALLED_CLIENT="n"
|
INSTALLED_CLIENT="n"
|
||||||
save_config
|
save_config
|
||||||
print_success "Removed Baresip"
|
print_success "Removed Baresip"
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user