Basculer entre DHCP et IP statique

2

Mon ordinateur portable doit utiliser DHCP à la maison et une adresse IP statique au travail. Autant que je sache, il n'y a aucun moyen de basculer rapidement entre les deux. Je dois configurer manuellement la connexion réseau chaque fois que je déplace l'ordinateur portable. Une alternative serait de créer un petit script Bash à éditer /etc/network/interfaces, mais je préférerais une méthode plus simple, telle que Préférences de proxy réseau → Emplacement.

Edit: On dirait que cela pourrait être simple en utilisant /etc/network/interfaces lui-même .

l0b0
la source
3
vous pouvez enregistrer plusieurs profils de connexion de gestionnaire de réseau et les basculer facilement dans l'applet networkmanager. (Cette question est probablement mieux adaptée au super-utilisateur ....)
Gryphius
@Gryphius: De quelle application s'agit-il? Je ne le trouve pas dans Système - & gt; Préférences Network Connections ne semble supporter rien de tel.
l0b0

Réponses:

3

Cela peut être facilement fait avec NCD, le logiciel de configuration réseau que je développe: http://code.google.com/p/badvpn/wiki/NCD

Le programme NCD suivant utilise la configuration statique ou DHCP en fonction de la valeur d'une variable. Pour changer, vous devez éditer le programme NCD et redémarrer le démon NCD. (mais voir ci-dessous pour la détection automatique)

process lan {
    # Network device name.
    var("eth0") dev;

    # Use static config or DHCP? Change to "true" for static config.
    var("false") is_home;

    # Wait for device and link.
    net.backend.waitdevice(dev);
    net.up(dev);
    net.backend.waitlink(dev);

    # Get configuration.
    provide("lan_config");
    depend("lan_config_done") config;

    # Assign IP address.
    net.ipv4.addr(dev, config.addr, config.addr_prefix);

    # Add default route.
    net.ipv4.route("0.0.0.0", "0", config.gateway, "20", dev);

    # Configure DNS servers.
    net.dns(config.dns_servers, "20");
}

process lan_config_home {
    depend("lan_config") dep;
    if(dep.is_home);

    # Choose static configuration.
    var("192.168.1.72") addr;
    var("24") addr_prefix;
    var("192.168.1.1") gateway;
    list("192.168.1.1") dns_servers;

    provide("lan_config_done");
}

process lan_config_other {
    depend("lan_config") dep;
    ifnot(dep.is_home);

    # Do DHCP.
    net.ipv4.dhcp(dep.dev) dhcp;

    # Verify address.
    ip_in_network(dhcp.addr, "127.0.0.0", "8") test_local;
    ifnot(test_local);

    # Alias configuration from DHCP.
    var(dhcp.addr) addr;
    var(dhcp.prefix) addr_prefix;
    var(dhcp.gateway) gateway;
    var(dhcp.dns_servers) dns_servers;

    provide("lan_config_done");
}

La sélection peut également être automatisée en vérifiant l'adresse MAC du serveur DHCP. Le programme NCD suivant exécute toujours le protocole DHCP, mais il vérifie ensuite l'adresse MAC du serveur DHCP par rapport à l'adresse du routeur domestique. S'ils correspondent, ils ignorent l'adresse obtenue par DHCP et attribuent une adresse statique, sinon ils attribuent l'adresse DHCP. (note: vous avez besoin du dernier NCD du svn repo pour cela, je viens d’implémenter le dhcp.server_mac variable)

process lan {
    # Network device name.
    var("eth0") dev;

    # MAC address of home router (6 two-digit caps hexadecimal values separated with colons).
    var("00:AB:CD:EF:51:74") home_mac;

    # Wait for device and link.
    net.backend.waitdevice(dev);
    net.up(dev);
    net.backend.waitlink(dev);

    # Do DHCP.
    net.ipv4.dhcp(dev) dhcp;

    # Are we home?
    strcmp(dhcp.server_mac, home_mac) is_home;

    # Choose configuration.
    provide("lan_config");
    depend("lan_config_done") config;

    # Assign IP address.
    net.ipv4.addr(dev, config.addr, config.addr_prefix);

    # Add default route.
    net.ipv4.route("0.0.0.0", "0", config.gateway, "20", dev);

    # Configure DNS servers.
    net.dns(config.dns_servers, "20");
}

process lan_config_home {
    depend("lan_config") dep;
    if(dep.is_home);

    println("using config: static");

    # Choose static configuration.
    var("192.168.1.72") addr;
    var("24") addr_prefix;
    var("192.168.1.1") gateway;
    list("192.168.1.1") dns_servers;

    provide("lan_config_done");
}

process lan_config_other {
    depend("lan_config") dep;
    ifnot(dep.is_home);

    println("using config: dhcp");

    # Verify address.
    ip_in_network(dep.dhcp.addr, "127.0.0.0", "8") test_local;
    ifnot(test_local);

    # Alias configuration from DHCP.
    var(dep.dhcp.addr) addr;
    var(dep.dhcp.prefix) addr_prefix;
    var(dep.dhcp.gateway) gateway;
    var(dep.dhcp.dns_servers) dns_servers;

    provide("lan_config_done");
}
Ambroz Bizjak
la source