DNS隧道搭建-内网测试版

宇宙安全声明:本文安装及操作步骤均为内网测试用。仅介绍iodine安装配置,其它工具自行探索。

起因

  工作所需,需要分析下隧道的流量,且没有提供测试用公网域名,又不想污染自己的域名。
  遂在内网esxi中起虚拟机搭建,记录下操作步骤(实战步骤仅简单介绍,不展开)

环境

设备 IP 备注
Ubuntu 24 10.10.220.162 模拟公网DNS递归服务器
Ubuntu 24 10.10.220.163 模拟公网个人VPS
kali 10.10.220.161 模拟实战中受害内网机器

安装&配置

DNS服务器

内网配置

  安装一个递归 DNS 服务器,我用的是Technitium,支持docker部署

Technitium DNS Server是一个开源的权威和递归 DNS 服务器,可用于自托管 DNS 服务器以实现隐私和安全。它开箱即用且无需或仅需最小的配置,并提供用户友好的网页控制台,可使用任何现代网页浏览器访问。

10.10.220.162上执行

  1. systemctl stop systemd-resolvedsystemctl disable systemd-resolved停掉Ubuntu自带dns
  2. rm -rf /etc/resolv.conf && vim /etc/resolv.conf 添加任意一个dns
  3. 保存以下代码到docker-compose.yml,然后docker compose up -d启动。
    services:
    dnsserver:
    container_name: dns-server
    hostname: dns-server
    image: technitium/dns-server:latest
    network_mode: host
    ports:
      - "53:53/tcp"    # DNS 服务
      - "53:53/udp"    # DNS 服务
      - "5380:5380/tcp" # Web 控制台(HTTP)
    environment:
      - DNS_SERVER_DOMAIN=dns.dnstest.cn
      - DNS_SERVER_ADMIN_PASSWORD=password # 设置管理员密码
    volumes:
      - ./data:/etc/dns
    restart: unless-stopped
  4. 访问http://10.10.220.162:5380,导航到Zones点击Add Zone添加一个测试用域名。如:dnstun.cn
  5. Add Record添加一条A记录,IPv4地址为10.10.220.163,TTL 60 。如:ns.dnstun.cn
  6. Add Record添加一条NS记录,Name Server值为ns.dnstun.cn,TTL 60 。如:tunnel.dnstun.cn

    5 6 两个步骤中记录名称随意,ns、dns啥的都可以,确保NS记录的解析值为A记录即可

最终结果如下:

DNS

实战配置

  实战环境中,需要一个公网可以解析的域名,且域名提供商支持你添加NS记录。
阿里云为例添加解析:

阿里云解析

VPS配置

安装

iodine的Linux端仅支持包管理和源码编译两种方式

启动服务端

10.10.220.163上执行

  1. systemctl stop systemd-resolved systemctl disable systemd-resolved停掉Ubuntu自带dns
  2. rm -rf /etc/resolv.conf && vim /etc/resolv.conf 添加任意一个dns
  3. 安装sudo apt install iodine
  4. iodined -f -c -P test 192.168.12.1 tunnel.dnstun.cn -DD启动服务端。

    -f:在前台运行
    -c:禁止检查所有传入请求的客户端IP地址。
    -P:客户端和服务端之间用于验证身份的密码。
    -D:指定调试级别,-DD指第二级。“D”的数量随级别增加。
    域名为NS记录的域名。

另起一个ssh连接,执行ip all,新增了一个网卡dns0即为成功。

test@test:~$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host noprefixroute 
       valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:13:f3:cc brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    altname enx000c2913f3cc
    inet 10.10.220.163/22 brd 10.10.223.255 scope global ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe13:f3cc/64 scope link proto kernel_ll 
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether ea:0f:8d:4c:8e:43 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
7: dns0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1130 qdisc fq_codel state UNKNOWN group default qlen 500
    link/none 
    inet 192.168.12.1/27 scope global dns0
       valid_lft forever preferred_lft forever

公网VPS要求

一定记得放开VPS的53端口

客户端

安装

kali自带,win可以到iodine下载预编译执行文件。

连接VPS

10.10.220.161上执行

  1. systemctl stop systemd-resolved systemctl disable systemd-resolved停掉自带dns
  2. rm -rf /etc/resolv.conf && vim /etc/resolv.conf 添加nameserver 10.10.220.162(实战环境确保客户端dig信息和自己添加的记录值相同即可)
  3. 运行iodine -f -P test tunnel.dnstun.cn,出现以下则为成功:
    └─# iodine -f -P test tunnel.dnstun.cn 
    Opened dns0
    Opened IPv4 UDP socket
    Sending DNS queries for tunnel.dnstun.cn to 10.10.220.162
    Autodetecting DNS query type (use -T to override).
    Using DNS type NULL queries
    Version ok, both using protocol v 0x00000502. You are user #1
    Setting IP of dns0 to 192.168.12.3  #分配给客户端的ip
    Setting MTU of dns0 to 1130
    Server tunnel IP is 192.168.12.1
    Testing raw UDP data to the server (skip with -r)
    Server is at 10.10.220.163, trying raw login: OK
    Sending raw traffic directly to 10.10.220.163
    Connection setup complete, transmitting data.

验证

在VPS上ping或者curl访问分配给客户端的ip,因为这个ip段为虚拟网卡的ip段,能访问通则证明成功。

后续步骤

当前状态可以看作VPS和客户端通过虚拟网卡网线直连,通过VPS无法访问客户端物理网卡的网段,可以通过FRP、NPS等穿透或socket代理实现访问内网。

文章地址:https://www.qingh.xyz/dns-tunneling/

暂无评论 IP地址位置数据由 纯真CZ88 提供支持

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇