Cómo detener la sobrescritura de Internet /etc/bootpd.plist

6

Configuré un /etc/bootpd.plist para proteger mi red inalámbrica, y para administrar direcciones IP atribuidas estáticamente.

Desafortunadamente, cuando inicio InternetSharing , este archivo se sobrescribe por una lista que no encontré la fuente de.

¿Cómo puedo evitar que InternetSharing sobrescriba este archivo?

¿Dónde está la fuente de este archivo que sobrescribe /etc/bootpd.plist ?

    
pregunta daniel Azuelos 26.03.2012 - 00:32

2 respuestas

9

Fuente del problema

Al estudiar los procesos generados por InternetSharing (con la ayuda de opensnoop y la depuración de los scripts de shell) finalmente construyo un manera de evitar esta sobrescritura sistemática y estúpida de /etc/bootpd.plist .

InternetSharing crea un /etc/bootpd.plist mínimo y luego genera 2 procesos:

/usr/libexec/bootpd
/usr/libexec/natpmpd

Solución

Reemplacé el bootpd original por un simple script de shell a cargo de Poner mi fuente de /etc/bootpd.plist en su lugar antes de disparar el Código original de bootpd . Por supuesto, la mayoría de estos comandos tienen que ser corrió como root .

/usr/bin/sudo -s    
cd /usr/libexec

# make a backup copy of the original binary bootpd
mv bootpd bootpd.orig

# create the shell script which will first install the wanted
# bootpd.plist and then fire the original bootpd with the
# correctly quoted original list of arguments "$@"
cat >bootpd <<eof
#!/bin/sh
cp /etc/bootpd.plist.src /etc/bootpd.plist
exec /usr/libexec/bootpd.orig "$@"
eof

# make this shell script executable
chmod 755 bootpd

cd /etc

# create the "source" bootpd.plist.src which will be copied every
# time by the above shell script and will cancel the copy made by
# "InternetSharing"
cat >bootpd.plist.src <<eof
<?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>allow</key>
    <array>
            <string>00:00:00:00:00:00</string>
            <string>...
    </array>
    <key>deny</key>
    <array>
            <string>...
    </array>
    <key>Subnets</key>
    <array>
            <dict>
                    <key>_creator</key>
                    <string>dan</string>
                    <key>allocate</key>
                    <true/>
                    <key>dhcp_router</key>
                    <string>10.0.2.1</string>
                    <key>lease_max</key>
                    <integer>86400</integer>
                    <key>lease_min</key>
                    <integer>86400</integer>
                    <key>name</key>
                    <string>10.0.2/24</string>
                    <key>net_address</key>
                    <string>10.0.2.0</string>
                    <key>net_mask</key>
                    <string>255.255.255.0</string>
                    <key>net_range</key>
                    <array>
                            <string>10.0.2.2</string>
                            <string>10.0.2.31</string>
                    </array>
            </dict>
    </array>
    <key>bootp_enabled</key>
    <false/>
    <key>detect_other_dhcp_server</key>
    <true/>
    <key>dhcp_enabled</key>
    <array>
            <string>en1</string>
    </array>
    <key>use_server_config_for_dhcp_options</key>
    <false/>
</dict>
</plist>
eof

Las 2 matrices allow y deny me permiten definir exactamente qué MAC Direcciones que aceptaré dentro de mi red compartida y cuál desterrará.

Esta protección está lejos de ser una prueba de balas, pero es mejor que la Falta total de protección provista por InternetSharing en una red WEP Fi red :).

Compatibilidad con las actualizaciones del sistema operativo

Para evitar problemas con cualquier actualización del sistema operativo que pueda corregir /usr/libexec/bootpd , aquí está el script de shell que ejecuto antes de cualquier actualización del sistema operativo:

/usr/bin/sudo -s    
cd /usr/libexec

# reset into place the backup copy of the original binary bootpd
mv bootpd.orig bootpd

# go back to a safe working uid
exit

Compatibilidad con versiones de SO

Este script de shell está trabajando en:

  • Lion
  • Mountain Lion
  • Mavericks
  • Yosemite

Encuesta de ataque

Con la opción -v pasada a bootpd , tengo un registro de direcciones MAC que intentaron solicitar una dirección IP pero fueron rechazados.

Para pasar esta opción -v a bootpd, la inserté en mi envoltorio bootpd :

#!/bin/sh
cp /etc/bootpd.plist.src /etc/bootpd.plist
exec /usr/libexec/bootpd.orig -v "$@"
    
respondido por el daniel Azuelos 24.04.2012 - 00:45
1

¡Probé el truco de reemplazo de guiones anterior y lo encontré muy útil! ¡Muchas gracias!

En mi configuración, el único requisito adicional era cambiar el bootpd.plist de:

<key>use_server_config_for_dhcp_options</key>
<false/>

a:

<key>use_server_config_for_dhcp_options</key>
<true/>

lo que abre instantáneamente el soporte de DNS a mis clientes DHCP.

Supongo que se debe tener en cuenta que cualquier cambio posterior de la configuración de Conexión compartida requerirá un cambio adicional de "/etc/bootpd.plist.src" copiando del "/etc/bootpd.plist".

De cualquier manera, el conflicto existente más prolongado entre Compartir Internet y Server.app relacionado con el servicio DHCP se resolverá con urgencia en versiones posteriores de Mountain Lion Server

    
respondido por el BlueAdmin 29.12.2012 - 15:36

Lea otras preguntas en las etiquetas