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 / 问题 / 1003006
Accepted
Ernest Dujo
Ernest Dujo
Asked: 2020-02-14 16:34:33 +0800 CST2020-02-14 16:34:33 +0800 CST 2020-02-14 16:34:33 +0800 CST

使用配置为请求选择硬件接口?

  • 772

我有一台 linux 机器(基于 Debian 10 的操作系统),有 3 个硬件接口连接到互联网,2 个是 USB 调制解调器:ifconfig 给出 ->

eth0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        ether b8:27:eb:95:a0:2c  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 14258  bytes 1613046 (1.5 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 14258  bytes 1613046 (1.5 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ppp0: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1500
        inet 10.199.25.78  netmask 255.255.255.255  destination 10.64.64.64
        ppp  txqueuelen 3  (Point-to-Point Protocol)
        RX packets 7  bytes 130 (130.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8  bytes 181 (181.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ppp1: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST>  mtu 1500
        inet 10.227.136.222  netmask 255.255.255.255  destination 10.64.64.65
        ppp  txqueuelen 3  (Point-to-Point Protocol)
        RX packets 7  bytes 130 (130.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8  bytes 181 (181.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.2.105  netmask 255.255.255.0  broadcast 192.168.2.255
        inet6 fe80::e1b9:e62c:3140:bfc5  prefixlen 64  scopeid 0x20<link>
        ether b8:27:eb:c0:f5:79  txqueuelen 1000  (Ethernet)
        RX packets 26548  bytes 5187998 (4.9 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 20025  bytes 5171235 (4.9 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

wlan0 是这里的默认接口,当我尝试时:curl --interface ppp1 ifconfig.me或者curl --interface ppp0 ifconfig.me请求超时,使用 sudo sudo curl --interface ppp1 ifconfig.me给出响应,但等效于 ppp0 超时,要添加哪些正确的路由规则才能选择要路由的硬件接口?

实际路由规则:

default via 192.168.2.1 dev wlan0 proto dhcp src 192.168.2.105 metric 303 
10.64.64.64 dev ppp0 proto kernel scope link src 10.233.6.240 
10.64.64.65 dev ppp1 proto kernel scope link src 10.149.182.92 
192.168.2.0/24 dev wlan0 proto dhcp scope link src 192.168.2.105 metric 303 

ip rule给出:

0:  from all lookup local 
32766:  from all lookup main 
32767:  from all lookup default 

ip -4 route show table all:

default via 192.168.2.1 dev wlan0 
10.64.64.64 dev ppp0 proto kernel scope link src 10.235.137.107 
10.64.64.65 dev ppp1 proto kernel scope link src 10.121.55.130 
192.168.2.0/24 dev wlan0 proto kernel scope link src 192.168.2.101 
local 10.121.55.130 dev ppp1 table local proto kernel scope host src 10.121.55.130 
local 10.235.137.107 dev ppp0 table local proto kernel scope host src 10.235.137.107 
broadcast 127.0.0.0 dev lo table local proto kernel scope link src 127.0.0.1 
local 127.0.0.0/8 dev lo table local proto kernel scope host src 127.0.0.1 
local 127.0.0.1 dev lo table local proto kernel scope host src 127.0.0.1 
broadcast 127.255.255.255 dev lo table local proto kernel scope link src 127.0.0.1 
broadcast 192.168.2.0 dev wlan0 table local proto kernel scope link src 192.168.2.101 
local 192.168.2.101 dev wlan0 table local proto kernel scope host src 192.168.2.101 
broadcast 192.168.2.255 dev wlan0 table local proto kernel scope link src 192.168.2.101 

PS。重新启动后,我尝试的所有路由都消失了(如预期的那样)

routing ip iptables interface
  • 1 1 个回答
  • 288 Views

1 个回答

  • Voted
  1. Best Answer
    Piotr P. Karwasz
    2020-02-15T14:19:45+08:002020-02-15T14:19:45+08:00

    什么curl --interface <iface> http://example.com是连接到example.com,使用接口的<iface>IP地址作为源。否则路由照常进行。

    如果您希望基于数据包源地址进行路由,则需要添加两个路由表(一个用于具有源的数据包10.199.25.78,一个用于具有源的数据包10.227.136.222)。让我们通过添加以下内容来给路由表名称:

    200 ppp0
    201 ppp1
    

    并/etc/iproute2/rt_tables用来自这些接口的数据包的默认路由填充它们:

    ip route add default dev ppp0 via 10.64.64.64 table ppp0
    ip route add default dev ppp1 via 10.64.64.65 table ppp1
    

    现在,您需要做的就是添加两条规则,它们将选择表ppp0或ppp1根据源地址:

    ip rule add from 10.199.25.78 table ppp0
    ip rule add from 10.227.136.222 table ppp1
    

    编辑:我深入研究了curl的--interface ppp0选项。它可以以两种方式工作(参见connect.c):

    • 如果进程有CAP_NET_RAW能力(比如当你是root时),它会绑定到给定的接口(通过SO_BINDTODEVICE),并且所有不使用ppp0接口的路由都会被忽略。
    • 如果进程没有特权,curl将绑定到ppp0接口的 IP 地址 ( 10.199.25.78) 并且路由照常进行。
    • 1

相关问题

  • 无法通过 Ubuntu VPN 访问外部网络

  • 将路由永久添加到 Solaris 10

  • Quagga 套件中的 ./configure --disable-zebra 代表什么?

  • 使用特定接口进行出站连接(Ubuntu 9.04)

  • Linux TC/策略路由工具

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