OpenNDS is not working

i am using openwrt with raspberry pi4.i installed the opennds captive portal correctly.i already worked with opennds and i know the how to enable configuration file to work condition.previously i had experience.but science couple of weeks opennds captive portal is not working.i want to know any additional feature to enable for new version or any other recommendation to do.i am kindly request this issue get and help from team.

You want to enable new features instead of getting it working ?

And you want to get assistance, based on a problem description saying "not working" ?

yes.i need assistant for troubleshoot the issue.No prompt flash page.

sorry, can't reproduce it here.

Perfect answer to a perfect question. Nearly pmsl :rofl:

i am using openwrt with raspberry pi4 b.and there is a separate network for the guests. Here is the screenshot of the interface


i want to setup captive portal only for the guest wifi network. Then i changed the configuration file as like this

but the thing is there is prompt splash page to identify the captive portal working correctly. Here is the logging option that i selected

so how can i troubleshoot this issue.

great, you basically posted the doc section of the conf file(s).
next time, just post some cute puppy photos instead.

paste the conf file, we don't want screen dumps.

do you have a phy0-ap0 interface ?

Have you tried reading the documentation?
Particularly, see this part:
https://opennds.readthedocs.io/en/stable/install.html#prerequisites

yes.phy0-ap0 interface is the guest network interface. Here is the configuration file.

config opennds
# enabled
# Default: 1 (enabled)
# Set to 0 to disable opennds
option enabled 1
###########################################################################################

# debuglevel
# Set Debug Level (0-3)
# Default: 1
# 0 : Silent (only initial startup, LOG_ERR, LOG_EMERG and LOG_CRIT messages will be seen, otherwise there will be no logging.)
# 1 : LOG_ERR, LOG_EMERG, LOG_CRIT, LOG_WARNING and LOG_NOTICE. (Level 1 is the default level.)
# 2 : debuglevel 1  + LOG_INFO
# 3 : debuglevel 2 + LOG_DEBUG
#option debuglevel '2'
###########################################################################################

# fwhook_enabled
# Firewall Restart hook
# Default: 1 (enabled)
# It is required for OpenWrt Firewall 4 NFT (OpenWrt 22.03.0 and later)
#
# Warning: Disabling this option may soft brick your router
# This option should always be enabled.
#
#option fwhook_enabled '1'
###########################################################################################

# ndsctlsocket
# The socket name to use for ndsctl socket access, relative to the tmpfs mountpoint.
# Any directory/folder specified must exist.
# Default: ndsctl.sock (Do not add a leading "/")
# Full default socket path would be /tmp/ndsctl.sock in OpenWrt
# In the following example, the socket path would be /tmp/sockets/ndsctl.sock
#option ndsctlsocket 'sockets/ndsctl.sock'
###########################################################################################

# log_mountpoint
# Local Log Mountpoint
# Default: router's volatile tmpfs storage eg on OpenWrt '/tmp'
#
# Local logging can be directed to any storage accessible to the router eg USB drive, SSD etc
#
# **WARNING** - you cannot use the router's built in flash storage as this would cause
# excessive wear and eventual flash failure
#
# Example:
#option log_mountpoint '/logs'
###########################################################################################

# Login Option
# Default: 0
# Integer value sent to PreAuth script as login mode
#
# opennds comes preconfigured for three basic modes of operation
#
# 0. If FAS is not enabled, then this functions as mode 1
#
# 1.Default Dynamic Click to Continue
# The pre-installed dynamic login page is enabled by setting option login_option_enabled = '1'.
# It generates a Click to Continue page followed by a info/advertising page.
# User clicks on “Continue” are recorded in the log file /[tmpfs_dir]/ndslog/ndslog.log
#
# 2. Username/Emailaddress Dynamic Login
# The pre-installed dynamic login page is enabled by setting option login_option_enabled = '2'.
# It generates a login page asking for username and email address followed by an info/advertising page.
# User logins are recorded in the log file /[tmpfs_dir]/ndslog/ndslog.log
#
# 3. Use Theme defined in ThemeSpec path (option themespec_path)
#
option login_option_enabled '1'
###########################################################################################

# Allow Preemptive Authentication
# Default: 1 - Enabled
# Disable by setting to 0
# This allows the ndsctl utility to preemptively authorise **connected** clients
# that have not entered the preauthenticated state.
# This is used by default to re-authenticate clients after a restart.
# This is also useful for example with IoT devices that do not have CPD (captive portal detection)
# or for a FAS to manage inter-captive-portal roaming by making use of a centralised database of client validations.
#
#option allow_preemptive_authentication '1'
###########################################################################################

# ThemeSpec Path
# Default: None
# Required when when login_option_enabled is set to '3'
#
# Note: /usr/lib/opennds/theme_click-to-continue.sh is used for login_option_enabled '1'
# and:  /usr/lib/opennds/theme_user_email_login.sh is used for login_option_enabled '2'
#
# Sets the ThemeSpec file path to be used when login_option_enabled '3'
#
# The ThemeSpec script makes use of lists of custom parameters, custom variables, custom image urls and custom files.
# and is used to generate the dynamic splash page sequence
#
# The ThemeSpec file will normally reside in /usr/lib/opennds/ but can be anywhere accessible to openNDS.
# The file must be flagged as executable and have the correct shebang for the default shell.
#
#option themespec_path '/usr/lib/opennds/<filename>'
###########################################################################################

# Define Custom Parameters
# Custom parameters are sent as fixed values to FAS
# Default None
#
# Custom Parameters listed in the form of param_name=param_value
# param_name and param_value must be urlencoded if containing white space or single quotes
# eg replace spaces with %20 - replace single quotes with %27
#
# Parameters should be configured one per line to prevent possible parsing errors.
# eg:
#list fas_custom_parameters_list '<param_name1=param_value1>'
#list fas_custom_parameters_list '<param_name2=param_value2>'
# etc.
#
# The following Working Example applies to the installed ThemeSpec Files:
# theme_click-to-continue-custom-placeholders
# and
# theme_user-email-login-custom-placeholders
#
#list fas_custom_parameters_list 'logo_message=openNDS:%20Perfect%20on%20OpenWrt!'
#list fas_custom_parameters_list 'banner1_message=BlueWave%20-%20Wireless%20Network%20Specialists'
#list fas_custom_parameters_list 'banner2_message=HMS%20Pickle'
#list fas_custom_parameters_list 'banner3_message=SeaWolf%20Cruiser%20Racer'
###########################################################################################

# Define Custom Variables
# Custom Variables are used by FAS to dynamically collect information from clients
# Default None
#
# Custom Variables are listed in the form of var_name=var_type
# var_name and var_type must be urlencoded if containing white space or single quotes
# eg replace spaces with %20 - replace single quotes with %27
#
# Variables should be configured one per line to prevent possible parsing errors.
# eg:
#list fas_custom_variables_list '<var_name1=var_type1>'
#list fas_custom_variables_list '<var_name2=var_type2>'
# etc.
#
# FAS Generic Variables - a custom FAS or ThemeSpec must be written to make use of FAS Generic Variables
#-------------------------------------------------------------------------------------------------------
# eg:
#list fas_custom_variables_list 'membership_number=number'
#list fas_custom_variables_list 'access_code=password'
#
# ThemeSpec Dynamically generated Form Fields
#--------------------------------------------
# ThemeSpec scripts can dynamically generate Form Field html and inject into the dynamic splash page sequence.
# This is achieved using a SINGLE line containing the keyword "input",
# in the form: fieldname:field-description:fieldtype
#
# Numerous fields can be defined in this single "input=" line, separated by a semicolon (;).
#
# The following Working Example applies to the installed ThemeSpec Files:
# theme_click-to-continue-custom-placeholders
# and
# theme_user-email-login-custom-placeholders
#
# this example inserts Phone Number and Home Post Code fields:
#
#list fas_custom_variables_list 'input=phone:Phone%20Number:text;postcode:Home%20Post%20Code:text'
#
###########################################################################################

# Define Custom Images
# Custom Images are served by a local FAS where required in dynamic portal pages
# Default None
#
# Custom images will be copied from the URL to the openNDS router
#
# Custom Images are listed in the form of image_name_type=image_url
# image_name and image_url must be urlencoded if containing white space or single quotes
# The image url must begin with http:// https:// or file://
# Custom images will be copied from the URL to the openNDS router
#
# Images should be configured one per line to prevent possible parsing errors.
#
#list fas_custom_images_list '<image_name1_[type]=image_url1>'
#list fas_custom_images_list '<image_name2_[type]=image_url2>'
# etc.
#
# "type" can be any recognised image file extension eg jpg, png, ico, etc.
#
# The following Working Example applies to the installed ThemeSpec Files:
# theme_click-to-continue-custom-placeholders
# and
# theme_user-email-login-custom-placeholders
#
#list fas_custom_images_list 'logo_png=https://openwrt.org/_media/logo.png'
#list fas_custom_images_list 'banner1_jpg=https://raw.githubusercontent.com/openNDS/openNDS/v9.5.0/resources/bannerbw.jpg'
#list fas_custom_images_list 'banner2_jpg=https://raw.githubusercontent.com/openNDS/openNDS/v9.5.0/resources/bannerpickle.jpg'
#list fas_custom_images_list 'banner3_jpg=https://raw.githubusercontent.com/openNDS/openNDS/v9.5.0/resources/bannerseawolf.jpg'
#
###########################################################################################

# Define Custom Files
# Custom Files are served by a local FAS where required in dynamic portal pages
# Default None
#
# Custom files will be copied from the URL to the openNDS router
#
# Images should be configured one per line to prevent possible parsing errors.
#
# Custom files are listed in the form of file_name_type=file_url
# file_name and file_url must be urlencoded if containing white space or single quotes
# The file url must begin with http:// https:// or file://
# Custom files will be copied from the URL to the openNDS router
#
#list fas_custom_files_list '<file_name1_[type]=file_url1>'
#list fas_custom_files_list '<file_name2_[type]=file_url2>'
# "type" can be any recognised file extension that can be used to display web content eg txt, htm etc.
#
# The following Working Example applies to the installed ThemeSpec Files:
# theme_click-to-continue-custom-placeholders
# and
# theme_user-email-login-custom-placeholders
#
#list fas_custom_files_list 'advert1_htm=https://raw.githubusercontent.com/openNDS/openNDS/v9.5.0/resources/bannerpickle.htm'
#
###########################################################################################

# Set refresh interval for downloaded remote files (in minutes)
# Seting to 0 (zero) means refresh is disabled
# Default 0
#
#option remotes_refresh_interval '720'
#
###########################################################################################

# Use outdated libmicrohttpd (MHD)
# Default 0
#
# Warning, this may be unstable or fail entirely - it would be better to upgrade MHD.
# Use at your own risk
#
# Older versions of MHD convert & and + characters to spaces when present in form data
# This can make a PreAuth or BinAuth impossible to use for a client if form data contains either of these characters
# eg. in username or password
#
# MHD versions earlier than 0.9.71 are detected.
#
# If this option is set to 0 (default), NDS will terminate if MHD is earlier than 0.9.71
# If this option is set to 1, NDS will attempt to start and log an error.
#
#option use_outdated_mhd '0'
###########################################################################################

# Maximum Page Size to be served by MHD
# Default 10240 bytes
# Minimum value 1024 bytes
# Maximum - limited only by free RAM in the router
#
# This sets the maximum number of bytes that will be served per page by the MHD web server
# Setting this option is useful:
#	1. To reduce memory requirements on a resource constrained router
#	2. To allow large pages to be served where memory usage is not a concern
#
#option max_page_size '4096'
###########################################################################################

# Maximum number of Local Log Entries
# Default 100
# Minimum value 0
# Maximum value - limited only by free storage space on the logging mountpoint
#
# If set to '0' there is no limit
#
# This is the maximum number of local log entries allowed before log rotation begins
# Both ThemeSpec and Binauth log locally if they are enabled
#
# **WARNING** - local logging is by default written to the tmpfs volatile storage
# If this option were to be set too high the router could run out of tmpfs storage and/or free RAM
#
# Non-volatile storage, such as a USB storage device may be defined using the log_mountpoint option
#
# Example:
#option max_log_entries '1000'
###########################################################################################

# WebRoot
# Default: /etc/opennds/htdocs
#
# The local path where the system css file, and default splash page image resides.
# ie. Serve the file splash.css from this directory
#option webroot '/etc/opennds/htdocs'
###########################################################################################

# GateWayInterface
# Default br-lan
# Use this option to set the device opennds will bind to.
# The value may be an interface section in /etc/config/network or a device name such as br-lan.
# The selected interface must be allocated an IPv4 address.
# In OpenWrt this is normally br-lan, in generic Linux it might be something else.
#
option gatewayinterface 'phy0-ap0'
###########################################################################################

# GatewayPort
# Default: 2050
#
# openNDS's own http server uses gateway address as its IP address.
# The port it listens to at that IP can be set here; default is 2050.
# This option rarely needs to be changed
# Warning: Port 80 is forbidden.
#
#option gatewayport '2050'
###########################################################################################

# GatewayName
# Default: openNDS
#
# gatewayname is used as an identifier for the instance of openNDS
#
# It is displayed on the default splash page sequence.
#
# It is particularly useful in the case of a single remote FAS server that serves multiple
# openNDS sites, allowing the FAS to customise its response for each site.
#
# Note: The single quote (or apostrophe) character ('), cannot be used in the gatewayname.
# If it is required, use the htmlentity &#39; instead.
#
# For example:
# option gatewayname 'Bill's WiFi' is invalid.
# Instead use:
# option gatewayname 'Bill&#39;s WiFi'
#
#option gatewayname 'My Captive Portal'
###########################################################################################

# Serial Number Suffix Enable
# Appends a serial number suffix to the gatewayname string.
#
# openNDS constructs a serial number based on the router mac address and adds it to the gatewayname
#
# Default 1 (enabled)
#
# To disable, set to 0
#
# Example:
#
#option enable_serial_number_suffix '0'
###########################################################################################

# GatewayFQDN
# Default: status.client
# This is the simulated FQDN used by a client to access the Client Status Page
# If not set, the Status page can be accessed at: http://gatewayaddress:gatewayport/
#
# Warning - services on port 80 of the gateway will no longer be accessible (eg Luci AdminUI)
#
# By default, the Error511/Status page will be found at http://status.client/ by a redirection
# of port 80 to http://gatewayaddress:gatewayport/
#
# Disable GatewayFQDN by setting the option to 'disable'
# ie:
#option gatewayfqdn 'disable'
#
# Alternate Useful Example:
#option gatewayfqdn 'login.page'

It is looking more and more like the OP's computer science practical class at college is Tuesday and Friday each week... /s

1 Like

In up to date versions of OpenWrt, a guest interface will be a bridge device and not a virtual wireless interface.

Did you read the documentation link I posted?

To show the active config, it would be normal to look at the output of:
uci export opennds

Opening the /etc/config/opennds file in an editor just shows the fully documented default file, making it very difficult to see what you have actually done.

It would also be useful to know what version of OpenWrt and openNDS you are running.

as well as i put NAT configurations as well


i am in trouble to related this​:cry::cry::cry:


yes these are the intrefaces.phy0-ap0 is the inbuild wifi adaptor that i use to make guest network

I can confirm opennds on OpenWrt 24.10.0 does not work.

You mean you too couldn't get it to work ?

1 Like

It is not that it does not work. The problem is that libmicrohttpd was updated for 24.10. Unfortunately openNDS does not recognise the new version as suitable so aborts startup.

If you had looked at the syslog you would have seen the error.

This has been fixed already and merged into openwrt/routing packages.
BUT there is an ongoing problem (since November 2024) with the OpenWrt build system that makes the Github CI fail on 24.10 so backporting is currently stalled. The OpenWrt problem is being worked on, but these things seem to be very slow these days.

It is not a problem though as there is a fully tested workaround.

Type the following commands and all should be well:

uci set opennds.@opennds[0].use_outdated_mhd='1'
uci commit opennds
service opennds restart

1 Like
uci set opennds.@opennds[0].use_outdated_mhd='1'
uci commit opennds
service opennds restart

Thank you. That's the solution. :100:

This topic was automatically closed 10 days after the last reply. New replies are no longer allowed.