daeuniverse/dae

[Support Request] 如何验证 TPROXY 正常开启?在 PPPoE 软路由中配置 TPROXY 本机代理连接挂起

Closed this issue · 6 comments

Checks

  • I have searched the existing issues
  • I have read the documentation
  • Is it your first time sumbitting an issue

Support Request

在 PPPoE 环境中根据 #304 配置本机代理

Current Behavior

lan_interface 下,局域网机器已经正常代理。

运行 iptables 启动脚本以后,

curl 域名解析不到 ip, curl ip 挂起。

ss -ltunp 看不到 12345 端口。

Expected Behavior

通过 TPROXY 正常代理本机请求

Steps to Reproduce

  1. dae 配置 dnsmasq
global {
  tproxy_port: 12345
  tproxy_port_protect: false
  so_mark_from_dae: 0x80
}

routing {
  pname(dnsmasq) -> must_direct
  // 其它直连规则
  fallback: auto // 代理
}

dns {
  routing {
    request { fallback: dnsmasq }
    // 省略 response
  }
}
  1. dnsmasq 上游使用运营商 ip , /etc/resolv.conf 使用运营商 ip 让 dae 劫持

  2. 运行 #304 中的 iptables 规则

  3. 在本机执行 curl 测试网络

Environment

  • Dae version (use dae --version):
dae version 0.7.4
go runtime go1.22.3 linux/amd64
Copyright (c) 2022-2024 @daeuniverse
License GNU AGPLv3 <https://github.com/daeuniverse/dae/blob/main/LICENSE>
  • OS (e.g cat /etc/os-release):
BUG_REPORT_URL="https://github.com/NixOS/nixpkgs/issues"
BUILD_ID="23.11.20240709.205fd42"
DOCUMENTATION_URL="https://nixos.org/learn.html"
HOME_URL="https://nixos.org/"
ID=nixos
LOGO="nix-snowflake"
NAME=NixOS
PRETTY_NAME="NixOS 23.11 (Tapir)"
SUPPORT_END="2024-06-30"
SUPPORT_URL="https://nixos.org/community.html"
VERSION="23.11 (Tapir)"
VERSION_CODENAME=tapir
VERSION_ID="23.11"
  • Kernel (e.g. uname -a):
Linux asus 6.1.96 #1-NixOS SMP PREEMPT_DYNAMIC Thu Jun 27 11:46:24 UTC 2024 x86_64 GNU/Linux
  • Others:

Anything else?

No response

Thanks for opening this issue!

@xinyifly 目前的 304 应该是不好用了,监听端口被移动到另一个 namespace 了

目测,在 host netns 把 0x40/0x40 mark 路由到 dae0,原来的 table 100 路由移到 dae netns 里面。然后由于内核会在 skb 跨越 netns 的时候重置 mark,还需要再多一条在 dae netns 内部的 iptables prerouting set mark。或者用 tc-skbedit 加 mark 也行。

@mzz2017 感谢,花了一晚上用 LXC 跑了个 OpenWrt 拨号,旁路由到运行 dae 的物理机上解决了我的需求。

@jschwinger233 如果后面研究出方案我再换回来。

顺带 IPv6-PD: 240e:abcd:abcd:abcd::/60 这样用 OpenWrt 的话会自动创建的 pppoe-wan 实现局域网分配公网 IPv6 的方案,我一直没搞懂软路由下用 pppd 配合 dnsmasq 或 dhcpcd 之类的其它工具要怎么搞。

@xinyifly 目前的 304 应该是不好用了,监听端口被移动到另一个 namespace 了

@xinyifly 大佬有新的解决方案么,用两台物理机分别部署op和dae感觉不太现实

@ctrysbita 用 LXC 容器啊,中文搜一下 LXC OpenWrt 有很多文章介绍的,宿主机的 Linux 跑 dae,LXC 容器里的 OpenWrt 拨号。

宿主机的两张网卡

  • WAN 口网卡 passthrough 给 LXC OpenWrt 容器拨号
  • 在 LAN 口网卡上创建一个网桥,OpenWrt 容器用 veth pair 连上这个网桥作为 OpenWrt 的 LAN 口,宿主机在网桥上配置静态 IP 和网关到 OpenWrt 容器

OpenWrt 在 DHCP 选项里把网关改到宿主机

不过因为我用 NixOS 所以我现在容器拨号也用的 NixOS containers 不用 OpenWrt 了。