首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将IP配置从一个接口移动到另一个接口

将IP配置从一个接口移动到另一个接口
EN

Stack Overflow用户
提问于 2012-04-17 06:35:02
回答 1查看 1.3K关注 0票数 2

我正在开发一个Python脚本来测试一个网络应用程序。作为测试的一部分,它需要移动网络配置(IP地址、路由.)从一个接口(物理接口)到另一个接口(桥),测试完成后,将系统恢复到原来的状态。在Python中实现这一点的最优雅的方法是什么?

我想过的一些想法:

  1. 在测试期间不要将IP地址从物理接口中取消分配,这样就不会丢失路由。但这意味着在测试期间,相同的IP地址将在桥上共存。对于某些特定的Linux内核来说,这会是一个问题吗?尽管,我的system...
  2. Assign ( IP地址)似乎工作得很好--从物理接口桥接和不分配IP地址。易于在python中实现,因为这需要执行简单的ifconfig调用和解析。但是,如果默认路由是通过物理接口,那么当我从物理interface.
  3. Parse中取消IP地址时,它就会消失-- ip route ls输出,并将路由与IP配置一起移动。这似乎是唯一合理的方法,但需要相当多的编码。
  4. 可能还有更优雅的地方吗?像iptables-save eth0>eth0_confiptables-restore eth0_conf?任何其他suggestions?

这个测试工具必须是可移植的,并且能够在不同的Linux内核上运行。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-17 11:38:21

我建议采取以下办法:

interface

  • Execute ifconfig eth0 down && ifconfig br0 up

  1. 确保桥接器接口关闭
  2. 配置桥

并恢复:

执行ifconfig br0 down && ifconfig eth0 up

现在,对于路线,这取决于你有什么样的路线。如果使用显式接口定义静态路由,那么唯一的选择似乎是解析ip route ls并将它们转换到新接口。

您还可以玩弄上下命令的顺序以及多个路由表:

代码语言:javascript
运行
复制
ip route add <whatever> table 2
ip rule add from br0 table 2

但是这会变得很棘手,所以我的建议是坚持简单的解决方案,即使它包含更多的编码。

下面是xend的network-bridge脚本中的另一个实现这一目标的示例:

代码语言:javascript
运行
复制
# Usage: transfer_addrs src dst
# Copy all IP addresses (including aliases) from device $src to device $dst.
transfer_addrs () {
    local src=$1
    local dst=$2
    # Don't bother if $dst already has IP addresses.
    if ip addr show dev ${dst} | egrep -q '^ *inet ' ; then
        return
    fi
    # Address lines start with 'inet' and have the device in them.
    # Replace 'inet' with 'ip addr add' and change the device name $src
    # to 'dev $src'.
    ip addr show dev ${src} | egrep '^ *inet ' | sed -e "
s/inet/ip addr add/
s@\([0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+/[0-9]\+\)@\1@
s/${src}/dev ${dst}/
" | sh -e
    # Remove automatic routes on destination device
    ip route list | sed -ne "
/dev ${dst}\( \|$\)/ {
  s/^/ip route del /
  p
}" | sh -e
}

# Usage: transfer_routes src dst
# Get all IP routes to device $src, delete them, and
# add the same routes to device $dst.
# The original routes have to be deleted, otherwise adding them
# for $dst fails (duplicate routes).
transfer_routes () {
    local src=$1
    local dst=$2
    # List all routes and grep the ones with $src in.
    # Stick 'ip route del' on the front to delete.
    # Change $src to $dst and use 'ip route add' to add.
    ip route list | sed -ne "
/dev ${src}\( \|$\)/ {
  h
  s/^/ip route del /
  P
  g
  s/${src}/${dst}/
  s/^/ip route add /
  P
  d
}" | sh -e
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10186298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档