web-dev-qa-db-ja.com

DHCPと静的IPを切り替えます

私のラップトップは、自宅ではDHCPを使用し、職場では静的IPを使用する必要があります。私の知る限り、一方と他方をすばやく切り替える方法はありません。ラップトップを移動するたびに、ネットワーク接続を手動で構成する必要があります。 1つの代替方法は、/etc/network/interfacesを編集するための小さなBashスクリプトを作成することですが、ネットワークプロキシ設定→場所などのより簡単な方法が必要です。

編集:これは単純かもしれないように見えます /etc/network/interfaces自体を使用

3
l0b0

これは、私が開発しているネットワーク構成ソフトウェアであるNCDを使用して簡単に実行できます。 http://code.google.com/p/badvpn/wiki/NCD

次のNCDプログラムは、変数の値に基づいて静的構成またはDHCPのいずれかを使用します。切り替えるには、NCDプログラムを編集し、NCDデーモンを再起動する必要があります。 (ただし、自動検出については以下を参照してください)

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");
}

DHCPサーバーのMACアドレスを確認することで、選択を自動化することもできます。次のNCDプログラムは常にDHCPを実行しますが、DHCPサーバーのMACアドレスをホームルーターのアドレスと照合します。それらが一致する場合は、DHCPで取得したアドレスを無視して静的アドレスを割り当てます。一致しない場合は、DHCPアドレスを割り当てます。 (注:これには、svnリポジトリからの最新のNCDが必要です。dhcp.server_mac変数を実装したばかりです)

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");
}
3
Ambroz Bizjak