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
    • 最新
    • 标签
主页 / user-68097

Patrick's questions

Martin Hope
Patrick
Asked: 2022-08-19 04:23:36 +0800 CST

wg-quick 设置的这些 nftables 规则是什么意思?

  • 1

我正在使用wg-quick打开 VPN 连接。我可以看到该实用程序正在设置一些nft规则,我想了解它们。我对 iptables 有一定的了解,但对 nftables 一无所知。

这是 Wireguard 配置文件:

[Interface]
PrivateKey = xxxxx
Address = 10.2.0.2/32
DNS = 10.2.0.1

[Peer]
PublicKey = yyyyyyyy
AllowedIPs = 0.0.0.0/0
Endpoint = 185.159.157.129:51820

当我调用时,wg-quick我看到了这个:

[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.2.0.2/32 dev wg0
[#] ip link set mtu 1420 up dev wg0
[#] resolvconf -a tun.wg0 -m 0 -x
[#] wg set wg0 fwmark 51820
[#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820
[#] ip -4 rule add not fwmark 51820 table 51820
[#] ip -4 rule add table main suppress_prefixlength 0
[#] sysctl -q net.ipv4.conf.all.src_valid_mark=1
[#] nft -f /dev/fd/63

这是nft规则的转储:

table ip wg-quick-wg0 {
        chain preraw {
                type filter hook prerouting priority raw; policy accept;
                iifname != "wg0" ip daddr 10.2.0.2 fib saddr type != local drop
        }

        chain premangle {
                type filter hook prerouting priority mangle; policy accept;
                meta l4proto udp meta mark set ct mark
        }

        chain postmangle {
                type filter hook postrouting priority mangle; policy accept;
                meta l4proto udp meta mark 0x0000ca6c ct mark set meta mark
        }
}

这些nft规则是什么意思,它们的用途是什么,为什么需要它们?

wireguard
  • 0 个回答
  • 212 Views
Martin Hope
Patrick
Asked: 2022-08-18 01:08:29 +0800 CST

Redsocks 不能与 Wireguard 一起使用,但可以与 OpenVPN 一起使用

  • 4

概括

我使用 VPN 来路由我的所有流量。直到最近,我还在使用 OpenVPN,但后来改用了 Wireguard。不幸的是,这破坏了我的 redsocks 设置,我不知道为什么。

我正在使用 redsocks,因为我正在使用不支持使用 SOCKS 代理的命令行程序 - 但我需要该程序通过 SOCKS SSH 隧道。

设置

概述:

no-socks-program -> iptables nat -> redsocks -> ssh -> destination
  1. 不支持袜子的程序与组 1001 一起启动
  2. iptables 匹配组并重定向到 redsocks 正在侦听的端口 1533
  3. Redsocks socksify 并重定向到 SSH 正在监听的 1533
  4. SSH 用于DynamicForward转发到目标服务器

细节:

  1. 匹配组1001和内部目的地(我启动了我想用这个组进行 sockify 的程序,目的地在 10/8):
    iptables -t nat -A OUTPUT -d 10.0.0.0/8 -m owner --gid-owner 1001 -j REDSOCKS
  1. 然后在 redsocks 链中,过滤掉通常的东西和 10.2/16,因为那是wireguard 网关所在的位置,然后重定向到端口 59375,redsocks 正在侦听该端口:
    iptables -t nat -A REDSOCKS -d 0.0.0.0/8 -j RETURN
    iptables -t nat -A REDSOCKS -d 100.64.0.0/10 -j RETURN
    iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN
    iptables -t nat -A REDSOCKS -d 169.254.0.0/16 -j RETURN
    iptables -t nat -A REDSOCKS -d 172.16.0.0/12 -j RETURN
    iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURN
    iptables -t nat -A REDSOCKS -d 198.18.0.0/15 -j RETURN
    iptables -t nat -A REDSOCKS -d 224.0.0.0/4 -j RETURN
    iptables -t nat -A REDSOCKS -d 240.0.0.0/4 -j RETURN
    iptables -t nat -A REDSOCKS -d 10.2.0.0/16 -j RETURN
    iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports 59375
  1. Redsocks 配置,监听 59375,重定向到 SSH 监听的 1533:
    redsocks {
        local_ip = 127.0.0.1;
        local_port = 59375;
        ip = 127.0.0.1;
        port = 1533;
        type = socks5;
    }
  1. 用于监听 1533 的 SSH 配置:
    Host socksify
        User me
        Hostname intermediate
        DynamicForward 1533

这在使用 OpenVPN 时有效,但在使用 Wireguard 时会中断,而且我太愚蠢了,无法弄清楚原因。

我可以在两者之间做出的唯一区别是路由和内核参数,由OpenVPNnet.ipv4.conf.all.src_valid_mark设置但不是由 OpenVPN 设置的。1wg-quick

Wireguard 的路由(redsocks 不工作):

> sudo ip rule
0:      from all lookup local
32764:  from all lookup main suppress_prefixlength 0
32765:  not from all fwmark 0xca6c lookup 51820
32766:  from all lookup main
32767:  from all lookup default

> sudo ip route show table all
default dev wg0 table 51820 scope link
default via 192.168.1.1 dev wlp3s0 proto dhcp metric 600
192.168.1.0/24 dev wlp3s0 proto kernel scope link src 192.168.1.205 metric 600
local 10.2.0.2 dev wg0 table local proto kernel scope host src 10.2.0.2
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
local 192.168.1.205 dev wlp3s0 table local proto kernel scope host src 192.168.1.205
broadcast 192.168.1.255 dev wlp3s0 table local proto kernel scope link src 192.168.1.205

> ip route get 10.89.2.21
10.89.2.21 dev wg0 table 51820 src 10.2.0.2 uid 1000
    cache

OpenVPN 的路由(redsocks 正在工作):

> sudo ip rule
0:      from all lookup local
32766:  from all lookup main
32767:  from all lookup default

> sudo ip route show table all
0.0.0.0/1 via 10.30.0.1 dev tun0
default via 192.168.1.1 dev wlp3s0 proto dhcp metric 600
10.30.0.0/16 dev tun0 proto kernel scope link src 10.30.0.14
128.0.0.0/1 via 10.30.0.1 dev tun0
192.168.1.0/24 dev wlp3s0 proto kernel scope link src 192.168.1.205 metric 600
local 10.30.0.14 dev tun0 table local proto kernel scope host src 10.30.0.14
broadcast 10.30.255.255 dev tun0 table local proto kernel scope link src 10.30.0.14
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
local 192.168.1.205 dev wlp3s0 table local proto kernel scope host src 192.168.1.205
broadcast 192.168.1.255 dev wlp3s0 table local proto kernel scope link src 192.168.1.205

> ip route get 10.89.2.21
10.89.2.21 via 10.39.0.1 dev tun0 src 10.39.0.13 uid 1000
    cache

采取的故障排除步骤

  1. 我尝试用 badvpn 替换redsocks,tun2socks但这是完全相同的问题。所以不是redsocks谁坏了。
  2. 我像这样打开 iptables 跟踪:

sudo iptables -t raw -A OUTPUT -d 10.89.0.0/16 -p tcp -m tcp --dport 443 -j TRACE

我在使用 OpenVPN 时看到SYN, SYN-ACK,ACK但仅SYN在使用 Wireguard 时才看到。没有ACK。

  1. 我将 Wireshark 用于 OpenVPN 和 Wireguard 并进行了比较。在 OpenVPN 流量中,我看到与 iptables 跟踪中相同的内容,正常的SYN, SYN-ACK, ACK. 但是,有趣的是,在使用 Wireguard 时,我看到了SYN,RST-ACK:

OpenVPN 普通 TCP:

开放式VPN

线卫SYN然后RST:

线卫

(10.2.0.2是我的wg0IP,10.89.2.21也是我的tun0IP。)

问题

为什么 redsocks 可以使用 OpenVPN 而不是 Wireguard,我需要做什么才能使其正常工作?

我很高兴提供更多信息。

更新

我发现 OpenVPN 和 Wireguard 之间的另一个区别。我wg-quick用来设置 Wireguard 连接,并且该实用程序用于nftables设置一些规则。他们来了:

table ip wg-quick-wg0 {
        chain preraw {
                type filter hook prerouting priority raw; policy accept;
                iifname != "wg0" ip daddr 10.2.0.2 fib saddr type != local drop
        }

        chain premangle {
                type filter hook prerouting priority mangle; policy accept;
                meta l4proto udp meta mark set ct mark
        }

        chain postmangle {
                type filter hook postrouting priority mangle; policy accept;
                meta l4proto udp meta mark 0x0000ca6c ct mark set meta mark
        }
}

我对它们的了解为零,nftables也不知道它们是什么意思,但这很可能是问题所在。

设置 0/1 路由

在 Wireguard 中设置,0.0.0.0/1, 128.0.0.0/1以AllowedIPs将路由与 OpenVPN 匹配,导致根本无法访问互联网。这是具有该设置的路由表:

> sudo ip route show table all
0.0.0.0/1 dev wg0 scope link
default via 192.168.1.1 dev wlp3s0 proto dhcp metric 600
128.0.0.0/1 dev wg0 scope link
192.168.1.0/24 dev wlp3s0 proto kernel scope link src 192.168.1.205 metric 600
local 10.2.0.2 dev wg0 table local proto kernel scope host src 10.2.0.2
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
local 192.168.1.205 dev wlp3s0 table local proto kernel scope host src 192.168.1.205
broadcast 192.168.1.255 dev wlp3s0 table local proto kernel scope link src 192.168.1.205

> ip route get 10.89.2.21
10.89.2.21 dev wg0 src 10.2.0.2 uid 1000
    cache
linux
  • 0 个回答
  • 187 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

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve