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 / 问题

问题[routing](server)

Martin Hope
user1250852
Asked: 2025-04-02 18:43:24 +0800 CST

两个链式 VPN 连接之间的路由

  • 5

我正在尝试设置以下网络:

Host1 ---(VPN1)--- Host2 ---(VPN2)--- Host3

在哪里

  • Host110.0.0.1/16接口上有 IP tun-vpn1;
  • Host210.0.0.2/16在 接口 上有 IP tun-vpn1,10.1.0.1/16在 接口 上有 IP tun-vpn2;
  • Host310.1.0.2/16接口上有 IP tun-vpn2。

具体来说,Host1是具有网络的 OpenVPN 服务器,10.0.0.0/16是Host2其客户端。因此,它们从 连接10.0.0.1 --- 10.0.0.2。

类似地,Host2是具有网络的 OpenVPN 服务器,10.1.0.0/16是Host3其客户端。因此,它们从 连接10.1.0.1 --- 10.1.0.2。

现在,我尝试Host1ping Host3。我尝试做的第一件事是从Host1pingHost2其接口tun-vpn2。因此,Host1我

ping 10.1.0.1

这是行不通的。

然后我尝试设置一条Host1路线

ip route add 10.1.0.0/16 via 10.0.0.2 dev tun-vpn1

我还是没有成功。tcpdump 显示没有数据包到达Host2,尽管它们Host1从接口离开tun-vpn1。

我该如何设置这个路由?

谢谢。

routing
  • 1 个回答
  • 48 Views
Martin Hope
Vorac
Asked: 2025-02-19 03:40:52 +0800 CST

为什么要有多个全球IP?

  • 5

DHCP 设置。我的路由器报告的上行链路与

ip = requests.get('https://api.ipify.org').text

做。

以下是一个例子:

$ curl https://api.ipify.org 46.10.148.15

但路由器仍然将传出的 IP 报告为 10.something。

问题:路由器报告的 IP 与我从外部服务看到的 IP 有何关系?

routing
  • 2 个回答
  • 32 Views
Martin Hope
slowcoder
Asked: 2024-12-16 09:18:36 +0800 CST

我如何保持我的规则的优先性?

  • 5

我在服务器上运行了以下代码,这样即使服务器连接到 VPN,我也可以通过 SSH 进入服务器。以下代码在启动后作为服务运行。

ip addr add 192.168.1.113 dev enp1s0 label enp1s0:0
ip rule add from 192.168.1.113 table 402
ip route add default via 192.168.1.1 dev enp1s0:0 table 402

这适用于 openvpn,但不适用于 wireguard,因为我的 wireguard 客户端在上述规则前面添加了一些规则。

0:  from all lookup local
32761:  from all lookup main suppress_prefixlength 0
32762:  not from all fwmark 0xca6c lookup 51820
32763:  from 192.168.1.113 lookup 402
32766:  from all lookup main
32767:  from all lookup default

如果我在 wireguard 连接后添加规则from 192.168.1.113 lookup 402,那么我就可以通过 SSH 进入服务器。所以我认为这是一个优先级问题。

32763即使在 wireguard 连接并添加了那几条规则( 32761, )之后,如何确保我的规则( )仍然保持优先权?32762

失败的解决方案:

我了解到左边的数字是优先级。然后我尝试将规则的优先级调低。

ip rule add from 192.168.1.113 table 402 prio 300

.. 但是在我连接到 wireguard vpn 之后,wireguard 客户端只是将他们的规则优先级放在我的规则之下299,然后298。

298:    from all lookup main suppress_prefixlength 0
299:    not from all fwmark 0xca6c lookup 51820
300:    from 192.168.1.113 lookup 402

有什么办法可以防止这种情况发生吗?我想我可以PostUp在 wireguard conf 文件中放置一个命令来改变优先级,但我觉得必须有一个更干净的解决方案。

routing
  • 1 个回答
  • 55 Views
Martin Hope
William
Asked: 2024-12-06 14:42:50 +0800 CST

路由匹配算法的一些细节

  • 7

为了在路由表中查找匹配的条目,将对路由表中的目标 IP 和网络掩码进行按位与运算。我想知道是否也会对路由表中当前条目的“网络目标”和网络掩码进行按位与运算,然后比较两个与运算结果;或者,只有一个与运算(目标 IP 和网络掩码),并将结果直接与路由表中的“网络目标”进行比较?

routing
  • 1 个回答
  • 149 Views
Martin Hope
filo
Asked: 2024-11-14 02:45:42 +0800 CST

VPN 和更改每个用户的出站接口 - 正确的源 IP 但错误的接口

  • 5

我通过 VPN 连接,希望一些用户帐户绕过它。VPN 接口是tap0(IP 是 172.16.xx),主接口是wlan0(IP 是 192.168.10.3)。所有常规流量都通过 进入互联网tap0。

我创建了第二张路由表并添加了一条uid规则:

# ip route add default via 192.168.10.1 dev wlan0 proto static table 2
# ip rule add uidrange 1001-1001 table 2
# ip route show table 2
    default via 192.168.10.1 dev wlan0

我预计用户的流量会通过源 IP 192.168.10.3 流出wlan0。然而,受影响用户的流量具有接口的 IP wlan0,但却通过错误的接口流出tap0(然后无处可去)。如果没有规则,流量将正常通过tap0。

奇怪的是,ip route get结果和我预期的一样。规则如下:

$ ip route get 8.8.4.4
8.8.4.4 via 192.168.10.1 dev wlan0 table 2 src 192.168.10.3 uid 1001
    cache 

没有规则:

$ ip route get 8.8.4.4
8.8.4.4 via 172.16.0.1 dev tap0 src 172.16.0.102 uid 1001
    cache 

我还尝试将dev wlan0和添加proto static到路由表,但什么都没改变。我完全没有iptables,所有策略都设置为ACCEPT。我也试过了,iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE但没有帮助(显然是因为流量从 流出tap0)。我还把rp_filter所有地方都设置为零。

无论如何,用户都可以成功 ping wlan0192.168.10.1 的网关。谢谢帮助。

routing
  • 1 个回答
  • 36 Views
Martin Hope
Neil Stephens
Asked: 2024-10-05 12:46:54 +0800 CST

如何在 VyOS 中链接 SNAT 和 DNAT

  • 6

你好,我想获得一些关于如何使用 VyOS 进行特定类型 NAT 的建议。

我遇到过一种情况,我想对目标地址和目标端口匹配的连接进行 NAT。但我不仅想转换目标端口,还想转换源地址。所以我需要 DNAT 和相应的 SNAT。

将会有多个连接,其理念是,它们将根据原始目的地获得不同的源地址,并重新路由到一个共同的目的地。

问题是 DNAT 先进行,由于它转换目的地,我不知道在 SNAT 中要匹配什么。如果我能够先进行 SNAT,那么问题就解决了。或者,如果我能够以某种方式用 DNAT “标记”连接,然后在 SNAT 中匹配它,那么也可以。

下面是两个连接的示例,其中我发明了一些不存在的连接标记功能来说明我想要做的事情:

set nat destination rule 89 destination address 192.168.222.222
set nat destination rule 89 destination port 10089
set nat destination rule 89 translation port 10000
set nat destination rule 89 modify mark '89'
set nat source rule 89 connection mark '89'
set nat source rule 89 translation address 10.1.1.89

set nat destination rule 96 destination address 192.168.222.222
set nat destination rule 96 destination port 10096
set nat destination rule 96 translation port 10000
set nat destination rule 96 modify mark '96'
set nat source rule 96 connection mark '96'
set nat source rule 96 translation address 10.1.1.96

请注意,两个连接都转换到同一个目的地,所以我无法在 SNAT 规则中使用它。

有没有办法在 DNAT 之前进行 SNAT,或者在 VyOS 中以其他方式实现我想要的效果?

其他注意事项:

  • 所有连接都来自同一主机,因此无法匹配
  • 原始源端口是短暂的,所以我无法匹配
  • 这种设置的目的是模拟从多个客户端到一个公共目的地的连接,而实际上它们来自单个主机,使用不同的目标端口来区分每个模拟客户端。

编辑:我认为如果我使用 iptables 而不是 VyOS 的话,这是可能的,如下所示:

iptables -t mangle -A PREROUTING -d 192.168.222.222 -p tcp --dport 10106 -j CONNMARK --set-mark 89
iptables -t nat -A PREROUTING -d 192.168.222.222 -p tcp --dport 10089 -j DNAT --to-destination 192.168.222.222:10000
iptables -t nat -A POSTROUTING -m connmark --mark 89 -j SNAT --to-source 10.1.1.89

iptables -t mangle -A PREROUTING -d 192.168.222.222 -p tcp --dport 10096 -j CONNMARK --set-mark 96
iptables -t nat -A PREROUTING -d 192.168.222.222 -p tcp --dport 10096 -j DNAT --to-destination 192.168.222.222:10000
iptables -t nat -A POSTROUTING -m connmark --mark 96 -j SNAT --to-source 10.1.1.96

如果 iptables 可以做到这一点,我猜 VyOS 也可以……但也许不行?

routing
  • 1 个回答
  • 58 Views
Martin Hope
Zentori
Asked: 2024-09-29 03:12:43 +0800 CST

在 AlmaLinux 9 中使用 NetworkManager 定义自定义路由

  • 5

在 AlmaLinux 9 中,应该使用 NetworkManager 来定义连接。在我们使用的数据中心中,必须定义路由才能使用虚拟机中的自定义 IP。我已经在主机中定义 IP 方面取得了进展,但无法让 NetworkManager 在重新启动时创建路由,但使用此命令网络可以正常工作:

ip route add default via 192.168.0.1 dev ens18 onlink src 94.23.81.XXX

我不熟悉 nmconnection 文件格式,因此无法使用 NetworkManager 来实现。我应该把这个命令放在哪里,或者在哪个文件中可以定义这个默认且唯一的路由?

谢谢。

routing
  • 1 个回答
  • 87 Views
Martin Hope
DBCL
Asked: 2024-09-07 00:56:55 +0800 CST

伪装回应有错吗?

  • 5

描述

10.223.0.7我的目标是从机器 A ( 10.101.0.40) ping 机器 C ( )

我有 2 个网络和 3 台机器

  • 网络A:10.223.0.0/24

  • 网络B:10.101.0.0/16

  • 机器 A(“pinger”):(10.101.0.40在 eth5 上)

  • 机器 B(“路由器”):(10.101.2.97在 ens7 上)和10.223.0.1(在 wg0 上)

  • 机器 C(“被 ping 的”):(10.223.0.7在 wg0 上)

  • 我已在机器 B 上全局启用 IP 转发,并在 ens7 和 wg0 接口上启用

  • 我的防火墙正在接受机器 B 上的转发规则。

  • 我在机器 B 上添加了这条规则:iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE以启用伪装

  • 我在机器 A 上添加了此规则ip route add 10.223.0.0/24 via 10.101.2.97 dev eth5来路由数据包

测试

当我启动 ping 时,我可以看到以下内容tcpdump -nni any icmp:

机器 A:

18:16:12.976724 eth5  Out  IP 10.101.1.40 > 10.223.0.7: ICMP echo request, id 7373, seq 1065, length 64

机器B:

18:16:12.977241 ens7  In  IP 10.101.1.40 > 10.223.0.7: ICMP echo request, id 7373, seq 1065, length 64
18:16:12.977287 wg0   Out IP 10.223.0.1 > 10.223.0.7: ICMP echo request, id 7373, seq 1065, length 64
18:16:12.978201 wg0   In  IP 10.223.0.7 > 10.223.0.1: ICMP echo reply, id 7373, seq 1065, length 64
18:16:12.978217 ens7  Out IP 10.223.0.7 > 10.101.1.40: ICMP echo reply, id 7373, seq 1065, length 64

机器 C

18:16:12.977754 wg0   In  IP 10.223.0.1 > 10.223.0.7: ICMP echo request, id 7373, seq 1065, length 64
18:16:12.977767 wg0   Out IP 10.223.0.7 > 10.223.0.1: ICMP echo reply, id 7373, seq 1065, length 64

并且机器 A 没有收到任何响应。

我认为问题出在机器 B 日志的第 4 行。SRC IP 是,10.223.0.7但在我看来应该是10.101.2.97,ens7 网络上机器 B 的 IP。我完全不知道为什么会这样。

我尝试添加这个伪装规则iptables -t nat -A POSTROUTING -o ens7 -j MASQUERADE但正如预期的那样:它不起作用。

问题

为什么伪装对请求起作用(参见机器 B 的第二行),而对响应不起作用(参见机器 B 的第 4 行)?

routing
  • 1 个回答
  • 38 Views
Martin Hope
Crazy Polenta
Asked: 2024-09-03 01:21:09 +0800 CST

使用多个表来路由来自两个 ISP 的 IP

  • 5

我需要配置我的路由器(Ubuntu Server 24/NNFTables),以便连接到 lan1 和 lan2 接口的计算机可以使用 wan1 或 wan2 接口浏览互联网,具体取决于子网 IP。

我通过两个不同的提供商接入互联网。

ISP 1:Bloco ip:111.11.111.0/28

ISP 2:Bloco ip:222.22.222.8/29

配置 netplan yaml:

网络:
    以太网:
        wan1:
            地址:
            - 111.11.111.2/28
            - 111.11.111.3/28
            - 111.11.111.4/28
            - 111.11.111.5/28
            - 111.11.111.6/28
            - 111.11.111.7/28
            - 111.11.111.8/28
            - 111.11.111.9/28
            - 111.11.111.10/28
            - 111.11.111.11/28
            - 111.11.111.12/28
            - 111.11.111.13/28
            - 111.11.111.14/28
            名称服务器:
                地址:
                - 8.8.8.8
                - 8.8.4.4
                搜索: []
            路线:
            - 至:默认
                通过:111.11.111.1
        wan2:
            地址:
            - 222.22.222.10/29
            - 222.22.222.11/29
            - 222.22.222.12/29
            - 222.22.222.13/29
            - 222.22.222.14/29
            名称服务器:
                地址:
                - 8.8.8.8
                - 8.8.4.4
                搜索: []
            路线:
            - 至:默认
                通过:222.22.222.9                
        局域网1:
            地址:
            - 192.168.10.1/24
            名称服务器:
                地址:[]
                搜索: []
        局域网2:
            地址:
            - 192.168.20.1/24
            名称服务器:
                地址:[]
                搜索: []
    版本: 2`
用户测试@路由器1:~$ ip 路由
默认通过 111.11.111.1 dev wan1 proto static
192.168.10.0/24 dev enp4s0 proto 内核范围链接 src 192.168.10.1
192.168.20.0/24 dev enp5s0 proto 内核范围链接 src 192.168.20.1
111.11.111.0/28 dev enp1s5 proto 内核范围链接 src 111.11.111.2
222.22.222.8/29 dev enp8s0 proto 内核范围链接 src 222.22.222.9

我们想要浏览的子网站及其各自的公共IP:

192.168.10.101 ---> 111.11.111.11
192.168.10.102 ---> 111.11.111.12
192.168.10.201 ---> 222.22.222.11
192.168.10.202 ---> 222.22.222.12
192.168.20.10 ---> 222.22.222.10

我发现我需要使用 IP ROUTE 处理多个路由表,但我尝试的所有配置都失败了......

有人知道我该如何解决这个问题吗?

我已经尝试了一些 nftables/ip 路由配置......但我无法使其工作......我搞砸了很多,甚至不知道我尝试过的一切......现在配置如下所示:

$ ip 路由
默认通过 111.11.111.9 dev wan1
192.168.10.0/24 dev lan1 proto 内核范围链接 src 192.168.10.1
192.168.20.0/24 dev lan2 proto 内核范围链接 src 192.168.20.1
111.11.111.0/28 dev wan1 proto 内核范围链接 src 111.11.111.2
222.22.222.8/29 dev wan2 proto 内核范围链接 src 111.11.111.10

$ ip 路由显示表 100
默认通过 111.11.111.1 dev wan1 proto static

$ ip 路由显示表 200
默认通过 222.22.222.9 dev wan2 proto static

$ ip 规则显示
0:从所有查找本地
32764:从 222.22.222.8/29 查找 200 原始静态
32765:从 111.11.111.0/28 查找 100 个原始静态
32766:来自所有查找主
32767:来自所有查找默认
routing
  • 1 个回答
  • 93 Views
Martin Hope
Oom_Ben
Asked: 2024-07-16 20:31:09 +0800 CST

Linux:当其他接口处于活动状态时无法 ping 接口

  • 6
悬赏将于明天到期。回答此问题可获得+50声誉悬赏。Oom_Ben 希望引起更多人对此问题的 关注:
任何提供永久性修复(即可在重启后继续存在)的解决方案都将受到高度赞赏,无论来源或方法如何。

我有一台 RHEL 服务器,计划用于设施监控。它在不同的子网上有 2 个网络接口。为了简洁起见,这些将是“ifconfig”的结果,我将它们称为:

  • eno2:11.11.11.11/24(DHCP,互联网子网)
  • eno3 :22.22.22.22/24(静态,基础设施子网)

现在我的问题如下:在服务器本身上,我可以 ping 通互联网(8.8.8.8),也可以 ping 通基础设施子网(22.22.22.201)上的设备,并且两者都使用了正确的接口(8.8.8.8 的 eno2 和 22.22.22.201 的 eno3)。例如

$ip route get 8.8.8.8
> 8.8.8.8 via 11.11.11.0 dev eno2 src 11.11.11.11 uid 0

$ip route get 22.22.22.201
> 22.22.22.201 dev eno3 src 22.22.22.22 uid 0

从我的办公室计算机(即远程)我也可以访问这两个子网上的设备,但我无法通过它自己的 IP 地址(既不是 11.11.11.11 也不是 22.22.22.22)访问服务器,除非我关闭其中一个接口。

因此从我的远程(办公室电脑)来看,我对服务器的 ping 如下所示:

# Both eno2 and eno3 active on server
ping 11.11.11.11 -t              ping 22.22.22.22 -t
Request timed out                Request timed out
Request timed out                Request timed out
Request timed out                Request timed out
...
# Turn off eno3
Reply from 11.11.11.11: bytes=32 Request timed out
Reply from 11.11.11.11: bytes=32 Request timed out  
Reply from 11.11.11.11: bytes=32 Request timed out  
Reply from 11.11.11.11: bytes=32 Request timed out  
Reply from 11.11.11.11: bytes=32 Request timed out
...
# Turn on eno3 (both on again)
Request timed out                Request timed out
Request timed out                Request timed out
Request timed out                Request timed out
Request timed out                Request timed out    
...
# Turn off eno2 
Request timed out                Reply from 22.22.22.22: bytes=32
Request timed out                Reply from 22.22.22.22: bytes=32
Request timed out                Reply from 22.22.22.22: bytes=32
Request timed out                Reply from 22.22.22.22: bytes=32
Request timed out                Reply from 22.22.22.22: bytes=32

这不是防火墙问题,因为禁用防火墙后也会发生同样的情况:

$firewall-cmd --state
>not running

RHEL 论坛上也报告了同样的症状。当 RHEL 配置了多个 IP 时,只有一个 IP 可以从远程网络访问,因此我通过将 rp_filter 设置为 2 并将各个接口设置为 0(无安全性)来实现解决方案。每个接口的 rp_filter 结果如下:

#sysctl -a 2>/dev/null | grep "\.rp_filter"
>
net.ipv4.conf.all.rp_filter = 2
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.eno2.rp_filter = 0
net.ipv4.conf.eno3.rp_filter = 0

我的接口规则和表格的输出如下:

# ip -4 -br a ls
>
lo               UNKNOWN        127.0.0.1/8 
eno3             UP             22.22.22.22/24 
eno2             UP             11.11.11.11/24 

知识产权规则

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

IP 表

# ip -4 r ls table all
default via 11.11.11.1 dev eno2 proto dhcp src 11.11.11.11 metric 100 
default via 22.22.22.1 dev eno3 proto static metric 101 
22.22.22.0/24 dev eno3 proto kernel scope link src 22.22.22.22 metric 101 
11.11.11.0/24 dev eno2 proto kernel scope link src 11.11.11.11 metric 100 
169.254.0.0/16 dev eno3 scope link metric 1000 
local 22.22.22.22 dev eno3 table local proto kernel scope host src 22.22.22.22 
broadcast 22.22.22.255 dev eno3 table local proto kernel scope link src 22.22.22.22 
local 11.11.11.11 dev eno2 table local proto kernel scope host src 11.11.11.11 
broadcast 11.11.11.255 dev eno2 table local proto kernel scope link src 11.11.11.11 
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

并使用 route -n 对上述输出进行总结:

root@APPSVR:~# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         11.11.11.1      0.0.0.0         UG    100    0        0 eno2
0.0.0.0         22.22.22.1      0.0.0.0         UG    101    0        0 eno3
22.22.22.0      0.0.0.0         255.255.255.0   U     101    0        0 eno3
11.11.11.0      0.0.0.0         255.255.255.0   U     100    0        0 eno2
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 eno3

然而,同样的问题仍然存在,如果两个界面都处于活动状态,我就无法访问任何一个界面。

我还通过将这些更改写入相关配置文件(不记得具体在哪里)使这些更改持久化,是的,我已经重新启动了服务器。

任何帮助或其他建议都将不胜感激。我已经花了大约 3 天时间解决这个问题。提前致谢!

routing
  • 2 个回答
  • 43 Views

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

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助
subwaysurfers
my femboy roommate

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve