AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 532611
Accepted
Willem
Willem
Asked: 2013-08-22 04:26:16 +0800 CST2013-08-22 04:26:16 +0800 CST 2013-08-22 04:26:16 +0800 CST

Linux:强制数据包的源地址到本地绑定的 IP

  • 772

我有 10.1.1.1 和 10.2.2.2 绑定到 eth0。

# ip address show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 04:01:05:ff:42:01 brd ff:ff:ff:ff:ff:ff
    inet 10.2.2.2/24 brd 10.2.2.255 scope global eth0
    inet 10.1.1.1/32 scope global eth0
    inet6 fe80::601:5ff:feff:4201/64 scope link 
       valid_lft forever preferred_lft forever
# ip route get 10.1.1.1
local 10.1.1.1 dev lo  src 10.1.1.1 

问题A:为什么IP绑定eth0时使用“dev lo”?

我想强制到 10.1.1.1 的本地连接具有 10.2.2.2 的源地址。所以我尝试:

# ip route add 10.1.1.1/32 dev eth0 src 10.2.2.2
# ip route show
default via 10.2.2.1 dev eth0 
10.1.1.1 dev eth0  scope link  src 10.2.2.2 
10.2.2.0/24 dev eth0  proto kernel  scope link  src 10.2.2.2 
# ip route get 10.1.1.1
local 10.1.1.1 dev lo  src 10.1.1.1 

问题 B:如何覆盖这个奇怪的“本地”路由?

背景:数据包被 IPVS 内核子系统拦截。在它到达那里之前,我需要正确的源地址,否则 IPVS 不知道如何处理它。使用 iptables 进行 SNAT 不起作用,因为这发生在 POSTROUTING 阶段,而 IPVS 会跳过它。另请参阅我在Linux IPVS in DR mode 上的相关问题:VIP unreachable for director

谢谢!

linux
  • 1 1 个回答
  • 2211 Views

1 个回答

  • Voted
  1. Best Answer
    pilona
    2013-08-22T06:35:56+08:002013-08-22T06:35:56+08:00

    本地表(表 255)在 main 之前被查询,并包含所有本地路由(因此得名)。它由内核维护(因此proto kernel)。在您的机器上,它可能看起来像这样。

    local 10.1.1.1 dev eth0 proto kernel scope host src 10.1.1.1
    broadcast 10.2.2.0 dev eth0 proto kernel scope link src 10.2.2.2
    local 10.2.2.2 dev eth0 proto kernel scope host src 10.2.2.2
    broadcast 10.2.2.255 dev eth0 proto kernel scope link src 10.2.2.2
    broadcast 127.0.0.0 dev lo proto kernel scope link src 127.0.0.1
    local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1
    local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1
    broadcast 127.255.255.255 dev lo proto kernel scope host src 127.0.0.1
    

    其中指定了源地址。

    Linux 支持多个路由表,并且路由涉及咨询路由策略数据库 (RPDB) 的使用,以决定何时以及咨询哪个表。如果表不包含答案,或者路由类型为throw,则查询下一个 RPDB 规则。

    $ ip ru
    0:      from all lookup local
    32766:  from all lookup main
    32767:  from all lookup default
    

    您可以尝试删除local表查找规则,然后将其放置 ( ip rule del pref 0; ip rule add from all lookup local pref 1),不建议这样做。然后,您将添加一条规则来查询自定义路由表(选择 255 以上的任意数量),其中将有一个 10.1.1.1 的唯一路由,源地址设置为 10.2.2.2。执行此操作的更好方法是,bind()如果您是与 10.1.1.1 对话的相关程序的作者,请致电。

    • 5

相关问题

  • Linux 主机到主机迁移

  • 如何在 Linux 机器上找到有关硬件的详细信息?

  • 如何在 Linux 下监控每个进程的网络 I/O 使用情况?

  • 在 RHEL4 上修改 CUPS 中的现有打印机设置

  • 为本地网络中的名称解析添加自定义 dns 条目

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve