Erstellen einer überbrückten Netzwerkverbindung im Terminal

Okay, ich kämpfe hier ein wenig. Ich bin nicht so gut mit Terminal und dem Lösen von Netzwerkproblemen, aber ich habe es bisher geschafft.

Wie kann ich meine Internetverbindung von einer Schnittstelle (sagen wir mal ) zu einer anderen (sagen wir nochmal) teilen , ohne die Internetfreigabe zu verwenden (da die Steuerung über das Terminal gemäß meiner Frage hier in Yosemite nicht wirklich zu funktionieren scheint )?en0en1

Ich verstehe, dass Internet Sharing eine Brücke (normalerweise als bridge100) erstellt und dann bootpd(glaube ich) einen DHCP-Server und NAT einrichtet, um den gesamten Datenverkehr von 192.168.2.xxx (dem überbrückten Netzwerk) zu Ihrem primären Netzwerk zu leiten .

Wie kann ich das gleiche Ergebnis erzielen, ohne das Freigabe-Voreinstellungsfenster zu verwenden?

Antworten (2)

Hier ist eine interessante Lösung, um das Internet mit einer Layer-2-Bridge zu teilen, aber ohne NAT/ DHCP (nicht erforderlich) /Internet Sharing Pref Panel zu verwenden:

Erstellen Sie ein Shell-Skript ethernet-bridge.sh in /usr/local/sbin mit folgendem Inhalt:

#! /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

und ausführbar machen:

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

Fügen Sie dann das folgende XML als com.ethernet-bridge.plist in /Library/LaunchDaemons ein

<?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>

Ändern Sie dann die Datei und laden Sie sie:

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

Die plist aktiviert den Bridge-Modus während des Bootens.

Überprüfen Sie mit ifconfig -aob die Brücke sichtbar ist.

Um den Bridge-Modus zu beenden, geben Sie einfach Folgendes ein:

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

Um den Bridge-Modus neu zu starten, geben Sie einfach Folgendes ein:

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

Richten Sie nun die Clients mit einer festen IP/Netzmaske/Gateway (der internen IP-Adresse des Briding-Rechners)/DNS ein oder richten Sie einen DHCP-Server auf dem Bridging-Rechner richtig ein.

Zusätzlich müssen Sie auf Ihrem Router eine statische Route zu dem Netzwerk einrichten, für das Sie die Internetfreigabe bereitstellen (in Ihrem Beispiel (en1)).

Bis jetzt funktionieren die Syslog-Meldungen nicht - ich werde versuchen, das Skript entsprechend zu verbessern.


Ein ähnlicher Ansatz wird hier skizziert , aber ich habe ihn in Yosemite nicht zum Laufen gebracht

Das ist großartig, danke! :) Ich habe den Bridge-Teil herausgearbeitet, indem ich mich man ifconfigeine Weile am Kopf kratzte, aber das sysctlStück wäre mir zu hoch gewesen. Jetzt müssen Sie nur noch herausfinden, wie Sie Airport in den AP-Modus versetzen. :P Aber das ist eine andere Frage ...

Ich tue es, indem ich einfach in meiner Netzwerk-Systemsteuerung einrichte…

Die „eingehende“ Seite (Ethernet 1) als automatisch, DHCP (so dass es alle benötigten Informationen direkt von meinem ISP abholt) und die ausgehende „gemeinsame“ Seite (Ethernet 2) als vollständig manuell (basierend auf dem, was die anderen vernetzten Maschinen tun würden normalerweise von meinem dedizierten Gateway zu sehen), IP-Adresse 192.168.0.1 Subnetz 255.255.255.0 Router leer, DNS habe ich auf die reguläre DNS-Adresse meines ISP eingestellt.

Funktioniert einwandfrei, wenn ich mein Gateway für längere Zeit herunterfahren muss.

Übrigens ist mein ISP-Router immer so eingestellt, dass er sich im Modus „nur ein Modem“ befindet, also kämpfe ich nicht dagegen an.

Übrigens habe ich keine Ahnung, wie ich das im Terminal machen soll - alles, was ich tue, ist, meinen gespeicherten "Standort" von "Mac als Client" in "Mac als Server" zu ändern und auf Übernehmen zu klicken.

Ich möchte es als Teil eines Skripts verwenden, also muss es wirklich Terminalarbeit sein. :\ Aber danke :)