valid interface combinations: * #{ managed } <= 2048, #{ AP, mesh point } <= 8, #{ P2P-client, P2P-GO } <= 1, total <= 2048, #channels <= 1, STA/AP BI must match * #{ WDS } <= 2048, total <= 2048, #channels <= 1, STA/AP BI must match
Die Ausgabe oben zeigt, dass der AP und die Stationskanäle übereinstimmen müssen : entweder
#channels <= 1
oder
STA/AP BI must match
bedeutet das Gleiche, dass Station und AP-Kanal übereinstimmen müssen. Damit Sie keinen Kanal in der Datei hostapd.conf angeben können, müssen Sie sicherstellen, dass der Kanal in der Datei derselbe ist, mit dem Sie bereits über Ihre verwaltete Schnittstelle (oder Station, gleiche Schnittstelle) verbunden sind.
Wie für den Schnittstellen - Namen, aus irgendeinem Grunde bin ich jetzt nicht in der Lage zu machen hostapd Arbeit mit Namen wie new0 und new1, aber wenn ich wlan0 und wlan1 alles funktioniert gut, wie pro meinem Beitrag.
Nachfolgend finden Sie ein einfaches Bash-Skript, das dies für Sie erledigt:
#!/bin/bash # If you need to debug, uncomment the following statement #set -x # and comment out the "exec" statement. [ "$USER" != "root" ] && exec sudo $0 "$@" exec 2>/var/log/$(basename $0).log if [ $# != 2 ]; then echo "Usage $0 interface action" echo "where interface is the name of the wireless interface to be used" echo "and action is one of start/stop " exit 1 fi MY_IF=$1 HPID=/tmp/host$USER.pid DPID=/tmp/dnsm$USER.pid WPID=/tmp/wpas$USER.pid [ -x /usr/bin/srm ] && RM=/usr/bin/srm || RM="/bin/rm -f" stop() { kill -9 $(cat $HPID) kill -9 $(cat $DPID) dhclient -r kill -9 $(cat $WPID) rm /tmp/*.my_conf rm /tmp/*$USER.pid iw dev wlan1 del ip link set dev $MY_IF down ip addr flush dev $MY_IF ip link set dev $MY_IF up iptables -t nat -D POSTROUTING -o $MY_IF -j MASQUERADE service network-manager start } my_exit() { case $1 in 2) echo "wpa_supplicant failed" >>&2 ;; 3) echo "dhclient failed" >>&2 ;; 4) echo "hostapd failed" >>&2 ;; 5) echo "dnsmasq failed" >>&2 ;; esac stop >>&2 exit $1 } start() { service network-manager stop iw phy phy0 interface add wlan1 type __ap ip addr flush dev $MY_IF ip link set dev $MY_IF up ip link set dev wlan1 up pkill -9 wpa_supplicant MYSECRET=$(mktemp /tmp/XXXXXX.my_conf) echo -e "Please enter BSSID and Password of the Wifi network which\n" echo -e "you wish to connect to:" read BSSID PASSWORD wpa_passphrase $BSSID $PASSWORD > $MYSECRET wpa_supplicant -B -i $MY_IF -c $MYSECRET -Dnl80211 -P $WPID 1> /dev/null EXIT_CODE=$? $RM $MYSECRET [[ $EXIT_CODE == 0 ]] && : || my_exit 2 pkill -9 dhclient dhclient $MY_IF [[ $EXIT_CODE == 0 ]] && : || my_exit 3 MYTEMPH=$(mktemp /tmp/XXXXXX.my_conf) MYTEMPD=$(mktemp /tmp/XXXXXX.my_conf) cat > $MYTEMPH <<EOF interface=wlan1 driver=nl80211 logger_syslog=-1 logger_syslog_level=2 logger_stdout=-1 logger_stdout_level=2 ssid=wtf hw_mode=g channel=3 macaddr_acl=0 auth_algs=3 ignore_broadcast_ssid=0 eap_server=0 wpa=2 wpa_passphrase=12345678 wpa_pairwise=TKIP CCMP rsn_pairwise=TKIP CCMP EOF pkill -9 hostapd /usr/sbin/hostapd -B -P $HPID $MYTEMPH 1> /dev/null sleep 3 ps ax | grep hostapd | grep -v grep >/dev/null if [[ ! $? == 0 ]]; then /usr/sbin/hostapd -B -P $HPID $MYTEMPH 1> /dev/null fi [[ $? == 0 ]] && : || my_exit 4 echo 1 >/proc/sys/net/ipv4/ip_forward ip addr add 10.111.113.1/24 dev wlan1 cat > $MYTEMPD <<EOF domain-needed bogus-priv dhcp-authoritative no-dhcp-interface=$MY_IF no-dhcp-interface=lo interface=wlan1 server=8.8.8.8 server=8.8.4.4 expand-hosts dhcp-range=10.111.113.2,10.111.113.100,12h EOF pkill -9 dnsmasq dnsmasq -C $MYTEMPD -x $DPID [[ $? == 0 ]] && : || my_exit 5 iptables -t nat -A POSTROUTING -o $MY_IF -j MASQUERADE } case $2 in start) stop >>&2 start ;; stop) stop ;; *) echo "Usage $0 interface action" echo "where interface is the name of the wireless interface to be used" echo "and action is one of start/stop " ;; esac
Stellen Sie sicher, dass der Kanal von hostapd.conf im obigen Skript (der Zeilenkanal = 3 ) mit demjenigen AP übereinstimmt, zu dem Sie eine Verbindung herstellen möchten. Ich habe nicht nach links, in den oben genannten, set -x, die Sie Fehler sehen kann, wenn überhaupt, wie das Skript fort: Wenn Sie einige Debug tun müssen, können Sie un kommentieren. Ich konnte hostapd nicht erstellen, wenn er aus einem Skript wie oben aufgerufen wurde, mit etwas anderem als country_code = us funktioniert, aber Sie haben vielleicht mehr Glück. Meine Version von Hostapd schlägt auch jedes Mal fehl, so dass ich eine Bedingung hinzugefügt habe, die testet, ob Hostapd ausgeführt wird oder nicht, und es versuchtgenau noch einmal, um es anzufangen.