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 / 问题 / 710137
Accepted
rlib
rlib
Asked: 2015-08-02 01:24:26 +0800 CST2015-08-02 01:24:26 +0800 CST 2015-08-02 01:24:26 +0800 CST

UDP 数据包到达 VPN 接口并没有传递给进程

  • 772

我有一台服务器 X (45.55.245.182) 通过 VPN 连接到服务器 Y。X 上的 VPN 接口是 tap0,ip 为 10.200.0.2;Y 上的 VPN 接口是 tap0,ip 为 10.200.0.1。我在服务器 Y 上运行 netcat 来监听 UDP 35000:

nc -lu 10.200.0.1 35000

在服务器 X 上,端口 35000 的数据包使用以下 iptables 规则进行 DNAT 处理:

iptables -t nat -A PREROUTING -p udp --dport 35000 -j DNAT --to-destination 10.200.0.1

在服务器 Y 上的 tap0 接口上运行 tcpdump 显示数据包按预期发送:

11:54:44.000610 ARP, Ethernet (len 6), IPv4 (len 4), Request who-has 10.200.0.1 tell 10.200.0.2, length 28
11:54:44.000638 ARP, Ethernet (len 6), IPv4 (len 4), Reply 10.200.0.1 is-at fa:0f:00:1a:57:59 (oui Unknown), length 28
11:54:44.154702 IP (tos 0x8, ttl 47, id 52840, offset 0, flags [DF], proto UDP (17), length 34)
    hotnet-213-57-17-185.hotnet.net.il.24740 > 10.200.0.1.35000: [udp sum ok] UDP, length 6

请参阅显示设置的图表: 在此处输入图像描述

但是,我看不到服务器 Y 上的侦听 netcat 获取数据(当我在客户端上按 enter 时,Y 的屏幕上没有任何回声)。

有什么问题?

iptables
  • 2 2 个回答
  • 563 Views

2 个回答

  • Voted
  1. Best Answer
    kasperd
    2015-08-02T02:14:01+08:002015-08-02T02:14:01+08:00

    对您的问题最有可能的解释是rp_filter,默认情况下已启用。服务器 Y 在 上接收数据包tap0,但根据其路由表,数据包应该到达不同的接口(可能eth0)。

    如果这确实是您的问题,那么解决方案是禁用rp_filterfor tap0。首先试试这个,看看问题是否消失:

    echo 0 > /proc/sys/net/ipv4/conf/tap0/rp_filter
    echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter
    

    一旦你让服务器 Y 接受数据包。由于来自错误的 IP 地址,您可能会遇到客户端拒绝回复的问题。这个问题有不同的解决方案。

    如果您选择SNAT在服务器 X 上使用,它将解决这两个问题。但是有两个警告。

    • 服务器 Y 将不知道客户端的 IP 地址。
    • 对客户端的回复必须经过很长的路通过服务器 X 才能返回到客户端,这可能比将它们直接路由回客户端效率低。
    • 2
  2. rlib
    2015-08-02T03:16:56+08:002015-08-02T03:16:56+08:00

    将源地址设置为数据包实际到达的 10.200.0.2 解决了问题:

    iptables -t nat -A POSTROUTING -p udp --dport 35000 -j SNAT --to 10.200.0.2
    
    • 0

相关问题

  • OpenVPN 的 Linux IP 转发 - 正确的防火墙设置?

  • iptables 单个规则中的多个源 IP

  • 存储 iptables 规则的规范方法是什么

  • 使用 iptables 和 dhcpd 进行端口转发

  • 根据 Apache 日志数据自动修改 iptables 以阻止行为不良的客户端

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