creare un AP senza il bridge con altre schede si puo?

Networking, configurazione della connessione, periferiche e condivisione di rete, ecc.

creare un AP senza il bridge con altre schede si puo?

Messaggioda roxima » lunedì 15 febbraio 2016, 20:39

Ciao a tutti, ho cercato molto sul forum ma non ho trovato post che fossero utili a risolvere il mio problema:

Premesso che sono un appassionato di vela, sul mio net ho installato un soft di navigazione marino (OpenCpn) che gira sotto una distro basata su ubuntu (navigatrix) che trovo fantastica per le applicazioni dedicate alla navigazione a vela.

Cio premesso, quando vado in barca sono costretto per ovvie ragioni a lasciare il pc sottocoperta, ma in questo modo mentre sono al timone non riesco a visualizzare ne interagire sullo schermo del pc.

Volevo quindi condividere il desktop del pc con un tablet o con il cellulare in modo da avere anche al timone la possibilità di vedere ed interagire con il software di navigazione.

Con winzozz ho risolto installando virtual router e vnc, ed il tutto funziona egregiamente senza che io sia obbligato ad avere connessione internet. Purtroppo non sono riuscito a fare la stessa cosa con ubuntu. Ho provato ad installare Hostpad e funziona, ma solo se ho una seconda scheda connessa ad internet che poi condivido con la wifi. Purtroppo questo sistema a me non serve perchè in navigazione spesso non ho connessione internet.

Sapreste dirmi come posso fare? Ritengo linux (del quale non ho molta esperienza) un sistema fantastico e sono certo che il modo per risolvere il mio problema esiste, ma non saprei proprio da che parte iniziare....

Ringrazio già chiunque possa darmi una mano!
roxima
Prode Principiante
 
Messaggi: 10
Iscrizione: febbraio 2011

Re: creare un AP senza il bridge con altre schede si puo?

Messaggioda tunnel_net » lunedì 15 febbraio 2016, 22:08

Senza tanti giri, vuoi collegare due pc in wifi ?

su uno
Codice: Seleziona tutto
sudo ip link set wlan0 down
sudo iwconfig wlan0 mode ad-hoc
sudo iwconfig wlan0 channel 1
sudo iwconfig wlan0 essid 'miossid'
# Add a WEP encryption key
sudo iwconfig wlan0 key 1234567890
sudo ip link set wlan0 up
sudo ip addr add 192.168.0.1/24 dev wlan0


sull'altro lo connetti a "miossid" e gli dai indirizzo 192.168.0.2
a questo punto i pc si pingano e usi vnc o quello che ti pare

(una crittografia WEP in alto mare basta e avanza !!)
apt-get moo
tunnel_net
Entusiasta Emergente
Entusiasta Emergente
 
Messaggi: 1988
Iscrizione: febbraio 2015
Desktop: gnome
Distribuzione: ubuntu 10.04
Sesso: Maschile

Re: creare un AP senza il bridge con altre schede si puo?

Messaggioda MariusMatutiae » martedì 16 febbraio 2016, 13:30

La soluzione di tunnel_net ha alcuni difetti: richiede che tu sappia come configurare le schede di rete sul telefono e sul tablet, è debole sulla sicurezza, non è facilmente generalizzabile al caso di molti utenti (più cellulari e più tablet), non ha configurato un DNS, e così via.

Usare hostapd risolve tutti questi problemi, perchè stabilisce una vera e propria rete wifi, con gateway, DNS, sicurezza WPA2, e così via.

Il suo unico problema è che richiede più lavoro. Per questo motivo ti passo un mio shell script che fa tutto questo per te. Perchè funzioni, è necessario che tu abbia i seguenti packages:
Codice: Seleziona tutto
sudo apt-get install dnsmasq haveged hostapd


Codice: Seleziona tutto
#!/bin/bash

# dependencies:
#    bash (to run this script)
#    util-linux (for getopt)
#    hostapd
#    dnsmasq
#    iptables
#    haveged (optional)

usage() {
    echo "Usage: $(basename $0) [options] <wifi-interface> <interface-with-internet> <access-point-name> [<passphrase>]"
    echo
    echo "Options:"
    echo "  -h, --help          Show this help"
    echo "  -c <channel>        Channel number (default: 1)"
    echo "  -w <WPA version>    Use 1 for WPA, use 2 for WPA2, use 1+2 for both (default: 1+2)"
    echo "  -g <gateway>        IPv4 Gateway for the Access Point (default: 192.168.12.1)"
    echo "  -d                  DNS server will take into account /etc/hosts (default: disabled)"
    echo
    echo "Example:"
    echo "  $(basename $0) wlan0 eth0 MyAccessPoint MyPassPhrase"
}

ARGS=$(getopt -o hc:w:g:d -l "help" -n $(basename $0) -- "$@")
[[ $? -ne 0 ]] && exit 1
eval set -- "$ARGS"

CHANNEL=1
GATEWAY=192.168.12.1
WPA_VERSION=1+2
ETC_HOSTS=0

while :; do
    case "$1" in
   -h|--help)
       usage
       exit 1
       ;;
   -c)
       shift
       if [[ -n "$1" ]]; then
      CHANNEL="$1"
      shift
       fi
       ;;
   -w)
       shift
       if [[ -n "$1" ]]; then
      WPA_VERSION="$1"
      shift
       fi
       ;;
   -g)
       shift
       if [[ -n "$1" ]]; then
      GATEWAY="$1"
      shift
       fi
       ;;
   -d)
       shift
       ETC_HOSTS=1
       ;;
   --)
       shift
       break
       ;;
    esac
done

if [[ $# -ne 3 && $# -ne 4 ]]; then
    usage
    exit 1
fi

WIFI_IFACE=$1
INTERNET_IFACE=$2
SSID=$3
PASSPHRASE=$4

if [[ $(id -u) -ne 0 ]]; then
    echo "You must run it as root."
    exit 1
fi

pkill -9 dhc* 2>/dev/null
pkill -9 dnsmasq 2>/dev/null


CONFDIR=$(mktemp -d /tmp/create_ap.${WIFI_IFACE}.conf.XXXXXXXX)
echo "Config dir: $CONFDIR"

# hostapd config
cat << EOF > $CONFDIR/hostapd.conf
ssid=${SSID}
interface=${WIFI_IFACE}
driver=nl80211
hw_mode=g
channel=${CHANNEL}

ctrl_interface=$CONFDIR/hostapd_ctrl
ctrl_interface_group=0
EOF

if [[ -n "$PASSPHRASE" ]]; then
    [[ "$WPA_VERSION" == "1+2" || "$WPA_VERSION" == "2+1" ]] && WPA_VERSION=3
    cat << EOF >> $CONFDIR/hostapd.conf
wpa=${WPA_VERSION}
wpa_passphrase=$4
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
EOF
fi

# dnsmasq config (dhcp + dns)
cat << EOF > $CONFDIR/dnsmasq.conf
interface=${WIFI_IFACE},${INTERNET_IFACE}
no-dhcp-interface=${INTERNET_IFACE}
bind-interfaces
dhcp-range=${GATEWAY%.*}.1,${GATEWAY%.*}.254,255.255.255.0,24h
dhcp-option=option:router,${GATEWAY}
server=8.8.8.8
server=8.8.4.4
EOF

[[ $ETC_HOSTS -eq 0 ]] && echo no-hosts >> $CONFDIR/dnsmasq.conf

# enable interface
ip link set down dev ${WIFI_IFACE}
ip addr flush ${WIFI_IFACE}
ip link set up dev ${WIFI_IFACE}
ip addr add ${GATEWAY}/24 dev ${WIFI_IFACE}

# enable NAT
iptables -t nat -A POSTROUTING -o ${INTERNET_IFACE} -j MASQUERADE
iptables -A FORWARD -i ${WIFI_IFACE} -j ACCEPT
OLD_IP_FORWARD=$(cat /proc/sys/net/ipv4/ip_forward)
echo 1 > /proc/sys/net/ipv4/ip_forward

# boost low-entropy
if [[ $(cat /proc/sys/kernel/random/entropy_avail) -lt 1000 ]]; then
    which haveged > /dev/null 2>&1 && {
   haveged -w 1024 -p $CONFDIR/haveged.pid
    }
fi

# start dns + dhcp server
dnsmasq -C $CONFDIR/dnsmasq.conf -x $CONFDIR/dnsmasq.pid

# start access point
echo "hostapd command-line interface: hostapd_cli -p $CONFDIR/hostapd_ctrl"
hostapd $CONFDIR/hostapd.conf

# exiting
for x in $CONFDIR/*.pid; do
    kill -9 $(cat $x)
done
rm -rf $CONFDIR
iptables -t nat -D POSTROUTING -o ${INTERNET_IFACE} -j MASQUERADE
iptables -D FORWARD -i ${WIFI_IFACE} -j ACCEPT
echo $OLD_IP_FORWARD > /proc/sys/net/ipv4/ip_forward
ip link set down dev ${WIFI_IFACE}
ip addr flush ${WIFI_IFACE}
exit 0


Mettilo in un file, per esempio create_ap, cambia i permessi, chmod 755 create_ap, e trasferiscilo in una directory appropriata,
Codice: Seleziona tutto
sudo mv create_ap /usr/local/bin


Lo si usa così:
Codice: Seleziona tutto
sudo service network-manager stop
sudo create_ap wlan0 eth0 IlNomeDellaNuovaRete LaPasswordDellaNuovaRete


Qui wlan0 è la tua interfaccia wifi, eth0 è l'interfaccia connessa a Internet (non importa se non hai connessione a Internet, lo script funziona sia che tu ce l'abbia sia che tu non ce l'abbia). Il comando precedente, service network-manager stop è assolutamente necessario a causa di un bug in dhcp. Questo vuol dire che, se vuoi utilizzare lo script quando hai la connessione a Internet (per esempio a casa), devi far seguire, ai due comandi di sopra,
Codice: Seleziona tutto
sudo dhclient -v eth0


Se ora vuoi connetterti al pc da tablet o smartphone, scarica una qualunque versione di vnc sul pc e sul tablet e/o smartphone, e lo fai esattamente come su Windows.

Lo script non è esattamente a provadi bomba, è cioè possibile che ci sia qualche ulteriore regolazione da fare. Fammi sapere.
Numquam latravit inepte
MariusMatutiae
Entusiasta Emergente
Entusiasta Emergente
 
Messaggi: 1300
Iscrizione: luglio 2012
Località: Sanremo
Distribuzione: Debian, OpenBSD, Arch Linux

Re: creare un AP senza il bridge con altre schede si puo?

Messaggioda roxima » martedì 16 febbraio 2016, 19:14

tunnel_net Immagine ha scritto:Senza tanti giri, vuoi collegare due pc in wifi ?

su uno
Codice: Seleziona tutto
sudo ip link set wlan0 down
sudo iwconfig wlan0 mode ad-hoc
sudo iwconfig wlan0 channel 1
sudo iwconfig wlan0 essid 'miossid'
# Add a WEP encryption key
sudo iwconfig wlan0 key 1234567890
sudo ip link set wlan0 up
sudo ip addr add 192.168.0.1/24 dev wlan0


sull'altro lo connetti a "miossid" e gli dai indirizzo 192.168.0.2
a questo punto i pc si pingano e usi vnc o quello che ti pare

(una crittografia WEP in alto mare basta e avanza !!)


Ciao tunnel_net,
innanzi tutto ti ringrazio per la risposta.
Ho provato il metodo da te indicato ma purtroppo non mi ha funzionato...
roxima
Prode Principiante
 
Messaggi: 10
Iscrizione: febbraio 2011

Re: creare un AP senza il bridge con altre schede si puo?

Messaggioda roxima » martedì 16 febbraio 2016, 19:18

MariusMatutiae Immagine ha scritto:La soluzione di tunnel_net ha alcuni difetti: richiede che tu sappia come configurare le schede di rete sul telefono e sul tablet, è debole sulla sicurezza, non è facilmente generalizzabile al caso di molti utenti (più cellulari e più tablet), non ha configurato un DNS, e così via.

Usare hostapd risolve tutti questi problemi, perchè stabilisce una vera e propria rete wifi, con gateway, DNS, sicurezza WPA2, e così via.

Il suo unico problema è che richiede più lavoro. Per questo motivo ti passo un mio shell script che fa tutto questo per te. Perchè funzioni, è necessario che tu abbia i seguenti packages:
Codice: Seleziona tutto
sudo apt-get install dnsmasq haveged hostapd


Codice: Seleziona tutto
#!/bin/bash

# dependencies:
#    bash (to run this script)
#    util-linux (for getopt)
#    hostapd
#    dnsmasq
#    iptables
#    haveged (optional)

usage() {
    echo "Usage: $(basename $0) [options] <wifi-interface> <interface-with-internet> <access-point-name> [<passphrase>]"
    echo
    echo "Options:"
    echo "  -h, --help          Show this help"
    echo "  -c <channel>        Channel number (default: 1)"
    echo "  -w <WPA version>    Use 1 for WPA, use 2 for WPA2, use 1+2 for both (default: 1+2)"
    echo "  -g <gateway>        IPv4 Gateway for the Access Point (default: 192.168.12.1)"
    echo "  -d                  DNS server will take into account /etc/hosts (default: disabled)"
    echo
    echo "Example:"
    echo "  $(basename $0) wlan0 eth0 MyAccessPoint MyPassPhrase"
}

ARGS=$(getopt -o hc:w:g:d -l "help" -n $(basename $0) -- "$@")
[[ $? -ne 0 ]] && exit 1
eval set -- "$ARGS"

CHANNEL=1
GATEWAY=192.168.12.1
WPA_VERSION=1+2
ETC_HOSTS=0

while :; do
    case "$1" in
   -h|--help)
       usage
       exit 1
       ;;
   -c)
       shift
       if [[ -n "$1" ]]; then
      CHANNEL="$1"
      shift
       fi
       ;;
   -w)
       shift
       if [[ -n "$1" ]]; then
      WPA_VERSION="$1"
      shift
       fi
       ;;
   -g)
       shift
       if [[ -n "$1" ]]; then
      GATEWAY="$1"
      shift
       fi
       ;;
   -d)
       shift
       ETC_HOSTS=1
       ;;
   --)
       shift
       break
       ;;
    esac
done

if [[ $# -ne 3 && $# -ne 4 ]]; then
    usage
    exit 1
fi

WIFI_IFACE=$1
INTERNET_IFACE=$2
SSID=$3
PASSPHRASE=$4

if [[ $(id -u) -ne 0 ]]; then
    echo "You must run it as root."
    exit 1
fi

pkill -9 dhc* 2>/dev/null
pkill -9 dnsmasq 2>/dev/null


CONFDIR=$(mktemp -d /tmp/create_ap.${WIFI_IFACE}.conf.XXXXXXXX)
echo "Config dir: $CONFDIR"

# hostapd config
cat << EOF > $CONFDIR/hostapd.conf
ssid=${SSID}
interface=${WIFI_IFACE}
driver=nl80211
hw_mode=g
channel=${CHANNEL}

ctrl_interface=$CONFDIR/hostapd_ctrl
ctrl_interface_group=0
EOF

if [[ -n "$PASSPHRASE" ]]; then
    [[ "$WPA_VERSION" == "1+2" || "$WPA_VERSION" == "2+1" ]] && WPA_VERSION=3
    cat << EOF >> $CONFDIR/hostapd.conf
wpa=${WPA_VERSION}
wpa_passphrase=$4
wpa_key_mgmt=WPA-PSK
wpa_pairwise=TKIP
rsn_pairwise=CCMP
EOF
fi

# dnsmasq config (dhcp + dns)
cat << EOF > $CONFDIR/dnsmasq.conf
interface=${WIFI_IFACE},${INTERNET_IFACE}
no-dhcp-interface=${INTERNET_IFACE}
bind-interfaces
dhcp-range=${GATEWAY%.*}.1,${GATEWAY%.*}.254,255.255.255.0,24h
dhcp-option=option:router,${GATEWAY}
server=8.8.8.8
server=8.8.4.4
EOF

[[ $ETC_HOSTS -eq 0 ]] && echo no-hosts >> $CONFDIR/dnsmasq.conf

# enable interface
ip link set down dev ${WIFI_IFACE}
ip addr flush ${WIFI_IFACE}
ip link set up dev ${WIFI_IFACE}
ip addr add ${GATEWAY}/24 dev ${WIFI_IFACE}

# enable NAT
iptables -t nat -A POSTROUTING -o ${INTERNET_IFACE} -j MASQUERADE
iptables -A FORWARD -i ${WIFI_IFACE} -j ACCEPT
OLD_IP_FORWARD=$(cat /proc/sys/net/ipv4/ip_forward)
echo 1 > /proc/sys/net/ipv4/ip_forward

# boost low-entropy
if [[ $(cat /proc/sys/kernel/random/entropy_avail) -lt 1000 ]]; then
    which haveged > /dev/null 2>&1 && {
   haveged -w 1024 -p $CONFDIR/haveged.pid
    }
fi

# start dns + dhcp server
dnsmasq -C $CONFDIR/dnsmasq.conf -x $CONFDIR/dnsmasq.pid

# start access point
echo "hostapd command-line interface: hostapd_cli -p $CONFDIR/hostapd_ctrl"
hostapd $CONFDIR/hostapd.conf

# exiting
for x in $CONFDIR/*.pid; do
    kill -9 $(cat $x)
done
rm -rf $CONFDIR
iptables -t nat -D POSTROUTING -o ${INTERNET_IFACE} -j MASQUERADE
iptables -D FORWARD -i ${WIFI_IFACE} -j ACCEPT
echo $OLD_IP_FORWARD > /proc/sys/net/ipv4/ip_forward
ip link set down dev ${WIFI_IFACE}
ip addr flush ${WIFI_IFACE}
exit 0


Mettilo in un file, per esempio create_ap, cambia i permessi, chmod 755 create_ap, e trasferiscilo in una directory appropriata,
Codice: Seleziona tutto
sudo mv create_ap /usr/local/bin


Lo si usa così:
Codice: Seleziona tutto
sudo service network-manager stop
sudo create_ap wlan0 eth0 IlNomeDellaNuovaRete LaPasswordDellaNuovaRete


Qui wlan0 è la tua interfaccia wifi, eth0 è l'interfaccia connessa a Internet (non importa se non hai connessione a Internet, lo script funziona sia che tu ce l'abbia sia che tu non ce l'abbia). Il comando precedente, service network-manager stop è assolutamente necessario a causa di un bug in dhcp. Questo vuol dire che, se vuoi utilizzare lo script quando hai la connessione a Internet (per esempio a casa), devi far seguire, ai due comandi di sopra,
Codice: Seleziona tutto
sudo dhclient -v eth0


Se ora vuoi connetterti al pc da tablet o smartphone, scarica una qualunque versione di vnc sul pc e sul tablet e/o smartphone, e lo fai esattamente come su Windows.

Lo script non è esattamente a provadi bomba, è cioè possibile che ci sia qualche ulteriore regolazione da fare. Fammi sapere.


Ciao Marius, il tuo suggerimento, anche se piu complesso, mi sembra valido, tuttavia, quando lancio lo script mi vengono fuori degli errori.
Accidenti, ora che ci penso non ho copiato la schermata del terminale.....
te la metto in un altro post.
roxima
Prode Principiante
 
Messaggi: 10
Iscrizione: febbraio 2011

Re: creare un AP senza il bridge con altre schede si puo?

Messaggioda roxima » martedì 16 febbraio 2016, 19:35

ecco cosa mi appare da terminale quando lancio lo script:

/ May a hundred thousand midgets invade \
| your home singing cheesy lounge-lizard |
| versions of songs from The Wizard of |
\ Oz. /
----------------------------------------
\
__,---.
/__|o )
`- / /
,) (,
// \\
{( )}
=======""===""===============
|||||
|||
|

alcyone@alcyone-1005P:~$ sudo service network-manager stop
[sudo] password for alcyone:
network-manager stop/waiting
alcyone@alcyone-1005P:~$ sudo create_ap wlan0 eth0 AlcyoneAIS Alcyonewifi
/usr/local/bin/create_ap: 26: /usr/local/bin/create_ap: [[: not found
/usr/local/bin/create_ap: 72: /usr/local/bin/create_ap: [[: not found
/usr/local/bin/create_ap: 82: /usr/local/bin/create_ap: [[: not found
Config dir: /tmp/create_ap.wlan0.conf.VUMAl66R
roxima
Prode Principiante
 
Messaggi: 10
Iscrizione: febbraio 2011

Re: creare un AP senza il bridge con altre schede si puo?

Messaggioda MariusMatutiae » mercoledì 17 febbraio 2016, 0:22

Ma su che pc sei? Si direbbe che la tua shell Bash non sia una vera shell bash. Sei per caso su un'architettura ARM? Cosa dice il comando
Codice: Seleziona tutto
uname -a

? Il costrutto che uso,
Codice: Seleziona tutto
if [[ test ]]

è assolutamente standard nella shell Bash.
Numquam latravit inepte
MariusMatutiae
Entusiasta Emergente
Entusiasta Emergente
 
Messaggi: 1300
Iscrizione: luglio 2012
Località: Sanremo
Distribuzione: Debian, OpenBSD, Arch Linux

Re: creare un AP senza il bridge con altre schede si puo?

Messaggioda roxima » giovedì 18 febbraio 2016, 0:12

Ora non ho il pc a portata di mano. Cmq è un x86 non un arm, si tratta di un asus eepc 1005. Appena riesco digito e ti dico. L'unica cosa è che non c'è ununtu vero e proprio, ma una distro basata su ubuntu, creata apposta x l'uso in barca, infatti implementa programmi di navigazione, meteo e anche radioamatoriali. Si chiama navigatrix
roxima
Prode Principiante
 
Messaggi: 10
Iscrizione: febbraio 2011


Torna a Connessione e configurazione delle reti

Chi c’è in linea

Visualizzano questa sezione: Bing [Bot] e 2 ospiti