问题标签 [iproute]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1716 浏览

networking - 在 docker 容器接口上应用 NetEM WAN 延迟

我想对 docker 容器的出口流量应用 NetEm 延迟。通常,我运行:

问题是我不知道容器连接到的接口。

例如,我正在运行以下容器:

然后我 ping 8.8.8.8:

我想要做的是从我的主机添加 NetEm 规则并查看 ping 时间的变化。

如果我运行ifconfig,我会看到存在多个虚拟以太网接口(因为其他容器正在运行),但我不知道哪个连接到我感兴趣的容器:

我相信我必须将 NetEm 规则应用于这些接口之一。那是对的吗?

0 投票
0 回答
990 浏览

openwrt - 如何将使用“all”和“iif”的策略路由规则转换为OpenWRT的UCI格式?

我会理解是否可以,如果可以,如何使用指令将以下规则转换为OpenWRT UCI 格式rule

我还有一个添加到特定表的默认路由:

我想对于这个我将不得不使用该route指令,我只是不确定如何并且我想更多地熟悉OpenWRT UCI执行此操作的方式。

我也想学习这一点,因为我想改进OpenWISP(开源 wifi 控制器)中的自动化设施。

提前致谢

费德里科

0 投票
0 回答
159 浏览

networking - 使用 TAP 嗅探或修改传入的 eth 数据包

我试过https://github.com/TOGoS/TUN2UDP

这允许我这样做:

我想做的是:

换句话说,我想在第 2 层拦截传入的数据包并控制阻止、修改或传递它们。

我认为也许桥接 ETH 和 TAP 是关键,但我无法弄清楚如何以我需要的方式以编程方式访问这个桥接器。

0 投票
0 回答
633 浏览

ubuntu - Ubuntu 服务器:多个 VLAN、虚拟端口和转发

我在 2 个 VLAN 中有 4 个 IP 地址。我需要使用不同的地址从 Ubuntu 服务器出去:

所有 VLAN 都通过一个 NIC 中的一根以太网电缆。

我在做什么:

1)这是我的 /etc/network/interfaces

2) 在/etc/iproute2/rt_tables 中创建路由表。在文件末尾添加:

3)运行以下命令后:

当我尝试时: curl --interface '175.176.95.119' ifconfig.co 它可以工作。另外,当我尝试: curl --interface '175.176.95.120' ifconfig.co 它可以工作。但是地址:175.176.96.119 和 175.176.96.120 它不起作用。

我该怎么做才能使用 175.176.96.119 和 175.176.96.120?谢谢!

0 投票
3 回答
1404 浏览

docker - 在 Docker 中模拟网络故障

我正在尝试在 docker 中模拟部分/全部网络/容器故障,以查看我的应用程序在故障条件下的行为。我已经开始使用 pumba,但它不能正常工作。更具体地说,此命令在运行时失败,无论是通过 pumba 还是使用 docker exec 直接在容器上运行时:

具有以下输出:

现在这是它变得陌生的地方。它在我的服务容器中运行时有效实际上,它仅在通过 pumba 运行时有效,而不是在安装 iproute2 包后直接运行(rabbitmq:3.6.10,redis:4.0.1,mongo:3.5.11)时有效。它在我的应用程序容器中不起作用,所有这些容器都使用 node:8.2.1 作为基础镜像,它已经安装了 iproute2。所有容器都没有应用任何 add_caps。

ip addr在其中一个应用程序容器上的输出:

0 投票
0 回答
490 浏览

node.js - 在 OpenShift 3 上部署自定义 NodeJS Docker 映像

基础 OpenShift NodeJS Docker 镜像没有安装 iproute 包,所以我的目标是更改基础镜像来实现这一点。我要做的是:

我更改了 6/Dockerfile 以包含缺少的包:

我构建图像:

当我开始一个 shell 会话时,我得到了这个:

ss 现在可用(iproute 包),但 node 和 npm 不可用:

我错过了任何步骤吗?帮助将不胜感激。

0 投票
1 回答
51 浏览

php - 将请求从外部 ip 路由到另一台服务器

我被困在了这一点上:

php 脚本向外部 ip 上的另一个 php 脚本发出 curl 请求,例如

我无法修改第一个脚本,不幸的是,外部 ip 永远关闭了。

因此,我需要将所有请求路由到服务器上新的相同脚本,但无法理解如何做得更好。

如果有域名而不是ip,我可以更改hosts文件。但事实并非如此。

我用谷歌搜索了 iptables,但是如何将请求连接到服务器上的确切脚本?我需要在那里做哪些改变?

0 投票
1 回答
1291 浏览

networking - 无法通过第二个 NIC(两跳)建立连接

我们在 Ubuntu Xenial 中的网络路由配置有问题。

我们有许多服务器同时使用 Debian 8.4 (Jessie) 和 Ubuntu 16.04.2 (xenial) 以及完全相同的网络设置(或者至少就我们所见而言)。

它们都有两个连接到两个 VLAN(比如“A”和“B”)的 NIC,尽管其他 VLAN 都可以访问,例如从 VLAN“C”。

这两个/etc/network/interfaces文件的格式为:

注意:为了更好的可读性,我伪造了名称和 IP。

...说xxxDebian 机器为 100,Ubuntu 机器为 200,我正在尝试从 VLAN“C”中的 192.168.1.10 ping 到以下地址:

  • 192.168.111.100:工作正常。
  • 192.168.222.100:工作正常。
  • 192.168.111.200:工作正常。
  • 192.168.222.200:没有答案!!

“B”vlan 主要用于备份和其他“后台”流量,以避免 vlan “A”中的饱和问题。

我知道有两个网络路径来访问同一台机器不是通常的设置,我必须说,现在只能连接来自其他网络的其中一个不是一个大问题。但困扰我的是为什么 我可以访问 Debian 机器而不是 Ubuntu 机器?

甚至,另一方面,如果它在两个平台上都运行良好,我们可以考虑从 NIC "A" 关闭一些服务(例如 ssh 和后端接口)以提高安全性(我们的防火墙只允许访问 vlan "B"来自我们的 IT 人员 vlan)。

当然,正如前面的接口片段中所注释的那样,网关 行在 Ubuntu 机器中被注释掉,但那是因为否则该机器中的网络初始化会失败。实际上,这就是我们要解决的问题。

但是两台机器的路由表几乎是一样的。我能看到的唯一区别是Ubuntu 机器中的onlink标志:

...但我可以通过以下命令将其删除:

它并没有解决问题。

之后,我还尝试取消注释“VLAN B”的网关行,正如我所说,它在/etc/network/interfaces文件中被注释掉并尝试重新启动网络,但这就是发生的事情:

...并且onlink标志又回来了。

作为注释,再次注释掉该行并发出新 /etc/init.d/networking restart命令,输出是相同的,直到机器重新启动,(即使网络,尽管 VLAN B 默认gateyay 问题,继续照常工作)。

以下是建议命令的输出:

...和有意义的部分sudo journalctl -xe

我搜索了很多关于能够找到一些相关信息但没有完全回答我的问题:

  • 在我看来,对“onlink”标志的解释指出了“onlink”标志可能导致“错误的反向路由”,意思是«告诉内核它不必检查是否当前机器可以直接访问网关»所以(我想通了)内核可能认为它可以(或应该)将来自 VLAN C 的传入连接的答案路由到默认网关,而不是认为从连接开始的同一个 NIC .

    • 但是,正如我所说,删除“onlink”标志似乎并没有改变任何东西。
  • 这个unix StackExchange 答案似乎通过使用多个路由表和规则(告诉内核使用哪个表)来解决问题(我还没有测试过)。但这并不能解释为什么 Debian 机器运行良好(我检查了两台机器的/etc/iproute2/rt_tables文件,它们也相同

所以我的最后一个假设是,它可能只是内核版本之间的实现差异,并且拥有那个 ubuntu 版本更新得多,这可能是正确的行为,所以在现代内核中,我需要使用两个不同的路由表(但我'不确定也不知道为什么......)。

因此,问题是:

我们在 Ubuntu 机器上做错了什么(或者其中有一些错误)吗?或者,相反,这是正确的行为,我们被迫设置更复杂的路由模式(通过每个 vlan 路由或通过使用两个路由表使两个默认网关再次工作)?

编辑:

现在我尝试添加静态路由来解决问题:

...但这冻结了我的 ssh 连接(认为 NIC A),即使我可以连接认为 NIC B(在 192.168.111.200)

两条规则同时似乎是不可能的:

编辑2:

我终于找到了Linux Advanced Routing & Traffic Control HOWTO,它似乎比我找到的所有其他文档更准确,特别是在它的第 4 章。规则 - 路由策略数据库我看到以下文本:

如果您想使用此功能,请确保您的内核编译时带有“IP:高级路由器”和“IP:策略路由”功能

...所以我的一切都表明,我之前关于内核实现差异的假设是正确的,具体而言,差异在于编译了这两个特性。

0 投票
1 回答
737 浏览

ip - OpenVPN:路由 SquidProxy

我正在尝试设置一个公共 squid 代理,通过世界其他地方的 VPN 服务器路由它的流量。它在 VPS 主机上的 docker 容器内运行。

使用推送网关的默认设置,我可以访问 VPS 本身上的 squidproxy,它确实通过 vpn 路由它的流量。

但是,没有外部 IP 可以访问 squid 代理。我确实有 docker 转发端口 3128:3128。

这与创建的 OpenVPN 路由有关(因为在 OpenVPN 启动之前可以访问 Squid 代理)

我发现正是这条路线似乎“阻止”了我的外部流量。

(10.91.10.5是VPN的网关)

如果我删除它,我可以再次访问 squid,但传出请求不使用 VPN。

我可以通过像这样显式添加它来使我的外部 IP 工作

(172.18.0.1 是 docker 网关)

但我需要它与任何外部 IP 一起工作。

我试过 ip route add 0.0.0.0 via 172.18.0.1 dev eth0。

但这不起作用,因为 128.0.0.0/1 更具体,所以首先匹配。

综上所述

1) 需要任何 IP 才能访问 SquidProxy(端口 3128)

2) 需要所有传出的 SquidProxy 请求 (80,443) 通过 VPN

任何帮助将不胜感激!

0 投票
1 回答
862 浏览

python - 在 Python 中检索网络命名空间的 netnsid

当试图找到veth位于不同命名空间中的一对的正确对等网络接口时,该端不仅由​​其iflink属性指示,而且由link-netnsid. 这link-netnsid是一个网络命名空间 ID,仅在当前网络命名空间内有意义。

Linux 内核不提供将 netnsid 映射到网络命名空间 inode 编号,这是唯一的唯一标识。但是,Linux 提供的请求将由 fd ( ) 或 PID ( )RTM_GETNSID标识的网络名称空间映射到本地 netnsid。NETNSA_FDNETNSA_PID

如何RTM_GETNSID在 Python 中提出这样的请求,最好使用pyroute2库?到目前为止,我无法成功为 PID 标识的命名空间请求 netnsid,而只能使用以下脚本返回无效参数错误 22: