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-543770

August Vrubel's questions

Martin Hope
August Vrubel
Asked: 2023-02-15 07:38:40 +0800 CST

来自 tun 接口的数据包未被 iptables 记录

  • 7

在 Ubuntu 22.04 上,我设置了以下iptables规则:

iptables -I OUTPUT -d 192.168.0.0/16 -j LOG --log-prefix "CHECK1 "
iptables -I FORWARD -d 192.168.0.0/16 -j LOG --log-prefix "CHECK2 "

为了验证我的设置是否正确,我在浏览器中导航到 website.com(位于子网中192.168.0.0/16)并看到一条CHECK1消息显示在/var/log/kern.log.

然后我运行了一个 C 程序,该程序创建了tun一个 IP 地址为 的接口172.30.0.1,并从中发出了一个手工制作的 TCP-SYN 数据包。数据包的源地址172.30.0.1和目标地址为192.168.255.8(website.com 的地址)。它出现在 Wireshark 中。但是, 中没有相应的日志消息/var/log/kern.log。

这个数据包发生了什么?

这是iptables-save:

*filter
:INPUT ACCEPT [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
:DOCKER - [0:0]
:DOCKER-ISOLATION-STAGE-1 - [0:0]
:DOCKER-ISOLATION-STAGE-2 - [0:0]
:DOCKER-USER - [0:0]
-A FORWARD -d 192.168.0.0/16 -j LOG --log-prefix "CHECK2 "
-A FORWARD -j DOCKER-USER
-A FORWARD -j DOCKER-ISOLATION-STAGE-1
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -o docker0 -j DOCKER
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A OUTPUT -d 192.168.0.0/16 -j LOG --log-prefix "CHECK1 "
-A DOCKER-ISOLATION-STAGE-1 -i docker0 ! -o docker0 -j DOCKER-ISOLATION-STAGE-2
-A DOCKER-ISOLATION-STAGE-1 -j RETURN
-A DOCKER-ISOLATION-STAGE-2 -o docker0 -j DROP
-A DOCKER-ISOLATION-STAGE-2 -j RETURN
-A DOCKER-USER -j RETURN
COMMIT
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:DOCKER - [0:0]
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT ! -D 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
-A DOCKER -i docker0 -j RETURN
COMMIT

这是 C 代码(为简洁起见,我省略了错误检查):

#include <arpa/inet.h>
#include <fcntl.h>
#include <linux/if.h>
#include <linux/if_tun.h>
#include <netinet/in.h>
#include <stdio.h>
#include <string.h>
#include <sys/ioctl.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>

static int
tunAlloc(void)
{
    int fd;
    struct ifreq ifr = {.ifr_name = "tun0", .ifr_flags = IFF_TUN | IFF_NO_PI};

    fd = open("/dev/net/tun", O_RDWR);
    ioctl(fd, TUNSETIFF, (void*)&ifr);
    ioctl(fd, TUNSETOWNER, geteuid());
    return fd;
}

static void
bringInterfaceUp(void)
{
    int sock;
    struct sockaddr_in addr = {.sin_family = AF_INET};
    struct ifreq ifr = {.ifr_name = "tun0"};

    inet_aton("172.30.0.1", &addr.sin_addr);
    memcpy(&ifr.ifr_addr, &addr, sizeof(struct sockaddr));

    sock = socket(AF_INET, SOCK_DGRAM, 0);
    ioctl(sock, SIOCSIFADDR, &ifr);
    ioctl(sock, SIOCGIFFLAGS, &ifr);
    ifr.ifr_flags |= IFF_UP | IFF_RUNNING;
    ioctl(sock, SIOCSIFFLAGS, &ifr);
    close(sock);
}

static void
emitPacket(int tap_fd)
{
    unsigned char packet[] = {0x45, 0x00, 0x00, 0x3c, 0xd8, 0x6f, 0x40, 0x00, 0x3f, 0x06, 0x08, 0x91,
                              172,  30,   0,    1,    192,  168,  255,  8,    0xa2, 0x9a, 0x27, 0x11,
                              0x80, 0x0b, 0x63, 0x79, 0x00, 0x00, 0x00, 0x00, 0xa0, 0x02, 0xfa, 0xf0,
                              0x89, 0xd8, 0x00, 0x00, 0x02, 0x04, 0x05, 0xb4, 0x04, 0x02, 0x08, 0x0a,
                              0x5b, 0x76, 0x5f, 0xd4, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x03, 0x07};

    write(tap_fd, packet, sizeof(packet));
}

int
main()
{
    int tap_fd;

    tap_fd = tunAlloc();
    bringInterfaceUp();
    emitPacket(tap_fd);
    close(tap_fd);

    return 0;
}
networking
  • 1 个回答
  • 98 Views
Martin Hope
August Vrubel
Asked: 2023-02-01 18:04:48 +0800 CST

尽管有路由规则,但流量未路由到 tun 接口

  • 5

我已经tun设置了一个 IP 地址为 172.100.0.1 的接口。 ip addr证实了这一点。我也跑过

ip route add 192.168.0.0/16 dev tun0

ip route list节目

10.2.164.0/22 dev wlan0 proto kernel scope link src 10.2.166.25
192.168.0.0/16 dev tun0 scope link

第一条规则是由我的网络管理员设置的。10.2.166.25 是我在wlan0.

但是,当我跑步时ip route get 192.168.1.1,我得到

192.168.1.1 via 10.2.164.1 dev wlan0 table 1029 src 10.2.166.25 uid 2000
    cache

我不知道为什么它会通过wlan0. 为什么不遵守我的路由规则?

ip route show table 0节目

default via 10.2.164.1 dev wlan0 table 1029 proto static
10.2.164.2/22 dev wlan0 table 1029 proto static scope link
default dev dummy0 table 1003 proto static scope link
10.2.164.0/22 dev wlan0 proto kernel scope link src 10.2.166.25
192.168.0.0/16 dev tun0 scope link
broadcast 10.2.164.0 dev wlan0 table local proto kernel scope link src 10.2.166.25
local 10.2.166.25 dev wlan0 table local proto kernel scope host src 10.2.166.25
broadcast 10.2.167.255 dev wlan0 table local proto kernel scope link src 10.2.166.25
broadcast 127.0.0.0 dev lo table local proto kernel scope link src 10.2.166.25
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 172.100.0.1 dev tun0 table local proto kernel scope host src 172.100.0.1
fe80::/64 dev wlan0 table 1029 proto kernel metric 256 pref medium
fe80::/64 dev wlan0 table 1029 proto static metric 10244 pref medium
unreachable default dev lo proto kernel metric 4294967295 error -1 pref medium
unreachable default dev lo proto kernel metric 4294967295 error -1 pref medium
unreachable default dev lo proto kernel metric 4294967295 error -1 pref medium
fe80::/64 dev tun0 table 1034 proto kernel metric 256 pref medium
unreachable default dev lo proto kernel metric 4294967295 error -1 pref medium
unreachable default dev lo proto kernel metric 4294967295 error -1 pref medium
unreachable default dev lo proto kernel metric 4294967295 error -1 pref medium
unreachable default dev lo proto kernel metric 4294967295 error -1 pref medium
fe80://64 dev dummy0 table 1003 proto kernel metric 256 pref medium
default dev dummy0 table 1003 proto static metric 1024 pref medium
unreachable default dev lo proto kernel metric 4294967295 error -1 pref medium
fe80::/64 dev rmnet_data0 table 1009 proto kernel metric 256 pref medium
default via fe80::953:77d9:c45f:cc0c dev rmnet_data0 table 1009 proto ra metric 1024 expires 64686sec hoplimit 255 pref medium
unreachable default dev lo proto kernel metric 4294967295 error -1 pref medium
unreachable default dev lo proto kernel metric 4294967295 error -1 pref medium
local ::1 dev lo table local proto unspec metric 0 pref medium
local fe80::3e28:6dff:fee2:f0d0 dev lo table local proto unspec metric 0 pref medium
local fe80::478d:89c5:a152:57aa dev lo table local proto unspec metric 0 pref medium
local fe80::4c49:b3ff:feb7:ac5c dev lo table local proto unspec metric 0 pref medium
local fe80::bc9a:eb93:5ec9:d8e7 dev lo table local proto unspec metric 0 pref medium
ff00::/8 dev dummy0 table local metric 256 pref medium
ff00::/8 dev rmnet_data0 table local metric 256 pref medium
ff00::/8 dev wlan0 table local metric 256 pref medium
ff00::/8 dev tun0 table local metric 256 pref medium
unreachable default dev lo proto kernel metric 4294967295 error -1 pref medium
routing
  • 1 个回答
  • 12 Views
Martin Hope
August Vrubel
Asked: 2023-02-01 16:08:31 +0800 CST

静态路由是怎么设置的

  • 5

看着man ip-route,我在下面看到这个部分protocol:

static - the route was installed by the
administrator to override dynamic routing.
Routing daemon will respect them and,
probably, even advertise them to its peers.

管理员如何设置这些?系统某处是否有配置文件?

routing
  • 1 个回答
  • 12 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

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

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve