Creazione di una connessione di rete con ponte nel terminale

3

Ok, sto faticando un po 'qui. Non sono molto bravo con Terminal e ho risolto i problemi di rete che lo utilizzano, ma sono riuscito a raggirare fino ad ora.

Senza usare Internet Sharing (perché controllandolo tramite Terminal come per la mia domanda qui in realtà non sembra funzionare in Yosemite) come posso condividere la mia connessione internet da un'interfaccia (diciamo en0 ) a un'altra (di nuovo, diciamo en1 )?

Capisco che Internet Sharing crea un bridge (di solito chiamato bridge100 ) e quindi utilizza bootpd (credo) per stabilire un server DHCP e NAT per indirizzare tutto il traffico da 192.168.2.xxx (che è la rete a ponte) fino alla rete principale.

Come posso ottenere lo stesso risultato senza utilizzare il pannello Pref di condivisione?

    
posta Stuart H 28.03.2015 - 15:02
fonte

2 risposte

2

Qui è una soluzione interessante per condividere internet con un bridge di livello 2 ma senza usare NAT / DHCP (non richiesto) / Pannello di Condivisione Internet per tutto:

Crea uno script di shell ethernet-bridge.sh in / usr / local / sbin con il seguente contenuto:

#! /bin/sh
# ######################################
#  coded by Nat!
#  2013 Mulle kybernetiK
#  GPL

command=${1:-start}
shift
proxyarp=${1:-no}
shift

start()
{
        sysctl -w net.inet.ip.forwarding=1
        sysctl -w net.inet.ip.fw.enable=1
        if [ "$proxyarp" != "no" ]
        then
                sysctl -w net.link.ether.inet.proxyall=1
        fi

        ifconfig bridge0 create
        ifconfig bridge0 addm en0
        ifconfig bridge0 addm en1
        ifconfig bridge0 up
        if [ $? -eq 0 ]
        then
                syslog -s "Ethernet Bridge is up"
        else
                syslog -s "Ethernet Bridge failure"
        fi
}


stop()
{
        ifconfig bridge0 destroy

        sysctl -w net.inet.ip.forwarding=0
        sysctl -w net.inet.ip.fw.enable=0
        sysctl -w net.link.ether.inet.proxyall=0

        syslog -s "Ethernet Bridge is down"
}



case "$command" in
        start*) start
                ;;

        stop*)  stop
                ;;
esac

e renderlo eseguibile:

chmod 755 /usr/local/sbin/ethernet-bridge.sh

Quindi inserisci il seguente XML in / Library / LaunchDaemons come com.ethernet-bridge.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">

<plist version="1.0">
    <dict>
        <key>Label</key>
        <string>com.ethernet-bridge.plist</string>
        <key>ProgramArguments</key>
        <array>
            <string>/usr/local/sbin/ethernet-bridge.sh</string>
        </array>
        <key>UserName</key>
        <string>root</string>
        <key>GroupName</key>
        <string>wheel</string>
        <key>RunAtLoad</key>
        <true/>
        <key>LaunchOnlyOnce</key>
        <true/>   
    </dict>
</plist>

Quindi modifica il file e caricalo:

sudo chmod 644 /Library/LaunchDaemons/com.ethernet-bridge.plist
sudo chown root:wheel /Library/LaunchDaemons/com.ethernet-bridge.plist
sudo launchctl load /Library/LaunchDaemons/com.ethernet-bridge.plist

Il plist abiliterà la modalità bridge durante l'avvio.

Verifica con ifconfig -a se il bridge è visibile.

Per interrompere la modalità bridge, inserisci:

sudo /usr/local/sbin/ethernet-bridge.sh stop

Per riavviare la modalità bridge, inserisci:

sudo /usr/local/sbin/ethernet-bridge.sh start

Ora imposta i client con un IP / netmask / gateway fisso (l'indirizzo IP interno della macchina per bridging) / DNS o imposta correttamente un server DHCP sul dispositivo di bridging.

Inoltre, devi configurare una route statica sul router per la rete a cui hai fornito Condivisione Internet (nell'esempio (en1)).

Fino ad ora i messaggi syslog non funzionano - cercherò di migliorare lo script in modo pertinente.

Un approccio simile è descritto qui , ma non l'ho fatto funzionare in Yosemite

    
risposta data 29.03.2015 - 00:28
fonte
0

Lo faccio semplicemente configurando il pannello di controllo della mia rete ...

Il lato "in entrata" (Ethernet 1) come automatico, DHCP (in modo che raccolga le informazioni necessarie direttamente dal mio ISP) e amp; il lato 'condiviso' in uscita (Ethernet 2) come manuale completo (basato su ciò che le altre macchine in rete normalmente si aspettano di vedere dal mio gateway dedicato), indirizzo IP 192.168.0.1 subnet 255.255.255.0 router vuoto, DNS I impostato sul mio ISP indirizzo DNS regolare.

Funziona bene, se devo spegnere il mio gateway per un certo periodo di tempo.

Il mio router ISP, btw, è sempre impostato in modalità "solo un modem", quindi non lo sto combattendo.

Non ho idea di come farlo nel terminale, btw - tutto ciò che faccio è cambiare la mia "posizione" salvata da "Mac come client" a "Mac come server" & premi Applica.

    
risposta data 28.03.2015 - 15:18
fonte

Leggi altre domande sui tag