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 / 问题 / 1155589
Accepted
Iuri G.
Iuri G.
Asked: 2024-03-03 08:51:57 +0800 CST2024-03-03 08:51:57 +0800 CST 2024-03-03 08:51:57 +0800 CST

连接wireguard时端口无法访问

  • 772
赏金将在 2 天后到期。此问题的答案有资格获得+100声誉奖励。 Iuri G.希望更多地关注这个问题:
需要一种方法来允许我的公共 IP 上的传入连接并通过wireguard 接口路由传出连接。

我有一台通过wireguard 路由所有流量的服务器。当我启动wireguard时,侦听该服务器公共IP的所有端口都不可用 - 甚至ssh也不起作用。

我想要的是允许来自任何IP的端口(例如ssh)上的传入流量,但对任何传出连接使用wireguard。

例子:

MY_SERVER 到任何公共 IP -> 使用wireguard 对等点进行路由(其他服务器应将wireguard 对等点的IP 视为源)。这是通过AllowedIPs = 0.0.0.0/0在wireguardconf中进行工作的。

MY_SERVER 的任何公共 IP -> 当启用wireguard 时,此功能不起作用。如果我停止wireguard它就会起作用。

有什么想法如何允许我的公共IP上的传入连接并通过wireguard路由传出连接吗?

更新:

主要问题是,由于wireguard 通过它路由所有数据包,我得到了非对称路由。因此,当给定端口的公共 IP 上的传入连接进入时,它的回复将通过 wg0 而不是公共接口进行路由,并且永远不会返回到客户端。

我能够通过添加来修复它ip rule add sport PORT table main,但不确定是否有更好的修复,所以我不必一一添加所有端口 - 我希望我开始侦听的任何端口都能正确路由。此外,此修复适用于 TCP,但不适用于 UDP。如果我可以让它同时适用于两种协议,那就太好了。

networking
  • 1 1 个回答
  • 83 Views

1 个回答

  • Voted
  1. Best Answer
    setenforce 1
    2024-03-15T01:37:32+08:002024-03-15T01:37:32+08:00

    您的路由表是无状态的,它们没有有关数据包作为答案或您的端口被绑定的任何信息。因此,您可以使用连接表在与服务器接口(而不是wireguard接口)建立连接时添加标记,然后为该连接的每个数据包恢复该标记。

    然后您可以在路由规则中使用此标记:

    iptables -t mangle -A PREROUTING -d <server_address> -m conntrack --ctstate NEW -j CONNMARK --set-mark 51820
    iptables -t mangle -A OUTPUT -j CONNMARK --restore-mark
    ip rule add fwmark 51820 table main
    

    或者如果你使用 nftables:

    nft add rule ip mangle prerouting ip daddr <server_address> meta mark set 51820
    nft add rule ip mangle prerouting meta mark 51820 ct mark set mark
    nft add rule filter output meta mark set ct mark
    ip rule add fwmark 51820 table main
    

    或者您可以通过在规则中列出端口来做到这一点,它可能会更干净。对于 UDP,您希望服务侦听单个 IP 地址(而不是 0.0.0.0),然后就ip rule应该可以工作。

    • 1

相关问题

  • 谁能指出我的 802.11n 范围扩展器?

  • 我怎样才能得到一个网站的IP地址?

  • 在一个 LAN 中使用两台 DHCP 服务器

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

  • 为本地网络中的名称解析添加自定义 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