Creación de una conexión de red en puente en la terminal

Bien, estoy luchando un poco aquí. No soy tan bueno con Terminal y resolviendo problemas de red usándolo, pero hasta ahora he logrado sobrevivir.

Sin usar Internet Sharing (porque controlar eso a través de Terminal según mi pregunta aquí en realidad no parece funcionar en Yosemite), ¿cómo puedo compartir mi conexión a Internet desde una interfaz (digamos en0) a otra (nuevamente, digamos en1)?

Entiendo que Internet Sharing crea un puente (generalmente llamado bridge100) y luego usa bootpd(creo) para establecer un servidor DHCP y NAT para enrutar todo el tráfico desde 192.168.2.xxx (que es la red puenteada) a través de su red principal .

¿Cómo puedo obtener el mismo resultado sin usar el panel de preferencias Compartir?

Respuestas (2)

Aquí hay una solución interesante para compartir Internet con un puente de capa 2 pero sin usar NAT/ DHCP (no requerido) /Panel de preferencias para compartir Internet en absoluto:

Cree un script de shell ethernet-bridge.sh en /usr/local/sbin con el siguiente contenido:

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

y hacerlo ejecutable:

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

Luego coloque el siguiente XML en /Library/LaunchDaemons como 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>

Luego modifique el archivo y cárguelo:

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

El plist habilitará el modo puente durante el arranque.

Compruebe con ifconfig -asi el puente es visible.

Para detener el modo puente simplemente ingrese:

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

Para reiniciar el modo puente simplemente ingrese:

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

Ahora configure los clientes con una IP fija/máscara de red/Puerta de enlace (la dirección IP interna de la máquina puente)/DNS o configure correctamente un servidor DHCP en la máquina puente.

Además, debe configurar una ruta estática en su enrutador a la red a la que proporciona Internet Sharing (en su ejemplo (en1)).

Hasta ahora, los mensajes de syslog no funcionan; intentaré mejorar el script de manera pertinente.


Aquí se describe un enfoque similar , pero no logré que funcionara en Yosemite

¡Esto es genial, gracias! :) Trabajé en la parte del puente rascándome la cabeza man ifconfigpor un tiempo, pero la sysctlparte me hubiera superado. Ahora solo para descubrir cómo configurar el aeropuerto en modo AP. :P Pero eso es para otra pregunta...

Lo hago simplemente configurando en mi panel de control de Red...

El lado 'entrante' (Ethernet 1) como automático, DHCP (por lo que recoge cualquier información que necesite directamente de mi ISP) y el lado saliente 'compartido' (Ethernet 2) como manual completo (basado en lo que harían las otras máquinas en red normalmente espero ver desde mi puerta de enlace dedicada), dirección IP 192.168.0.1 subred 255.255.255.0 enrutador en blanco, DNS que configuré en la dirección DNS normal de mi ISP.

Funciona bien, si tengo que desconectar mi puerta de enlace durante un período de tiempo prolongado.

Mi enrutador ISP, por cierto, siempre está configurado para estar en modo 'solo un módem', por lo que no estoy luchando.

No tengo idea de cómo hacer eso en la terminal, por cierto, todo lo que hago es cambiar mi "Ubicación" guardada de "Mac como cliente" a "Mac como servidor" y presionar Aplicar.

Estoy buscando usarlo como parte de un script, por lo que realmente necesita ser un trabajo de terminal. :\ Pero gracias :)