關於「dnsmasq」的操作使用 [論壇 - Ubuntu 與工具程式及軟體推薦]


正在瀏覽:   1 名遊客


 到底部   前一個主題   下一個主題  [無發表權] 請登錄或者註冊



關於「dnsmasq」的操作使用
會員五級
註冊日期:
2012/4/22 10:50
所屬群組:
已註冊使用者
等級: 32
HP : 158 / 790
MP : 483 / 12698
EXP: 60
離線
延續「關於「resolvconf」的操作使用」和「#2 回覆: 網路無法連線」這兩篇的討論。

以下是對「dnsmasq」的一些探索紀錄。

以下測試環境是「Xubuntu 16.04 amd64 英文界面」。

================================================================================

## 相關討論

* Debian Wiki / dnsmasq
* Ubuntu Community Help Wiki / Dnsmasq
* Arch Wiki / dnsmasq
* subject: ubuntu 1604 /etc/resolv.conf 127.0.1.1
* #3 回覆: 關於「resolvconf」的操作使用

================================================================================

## 鳥哥的 Linux 私房菜

* 第十九章、主機名稱控制者: DNS 伺服器 / 19.2 Client 端的設定 / 19.2.1 相關設定檔: /etc/hosts, /etc/resolv.conf, /etc/nsswitch.conf
* 第十九章、主機名稱控制者: DNS 伺服器 / 19.2 Client 端的設定 / 19.2.2 DNS 的正、反解查詢指令: host, nslookup, dig
* 第四章、連上 Internet

================================================================================

## Manpage

* man NetworkManager.conf
* man dnsmasq

================================================================================

## 測試環境


$ cat /etc/hosts


顯示


127.0.0.1 localhost
127.0.1.1 my-host-name

...略..



註: 上面「my-host-name」會根據您的系統而定。

執行


$ cat /etc/NetworkManager/NetworkManager.conf



顯示


[main]
plugins=ifupdown,keyfile,ofono
dns=dnsmasq

[ifupdown]
managed=false



註: 也可以執行「NetworkManager --print-config」,可以參考「#5 回覆: 關於「NetworkManager」的操作使用」。

執行


$ cat /etc/resolv.conf



顯示


# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.1.1




執行


$ ps aux | grep dnsmasq



顯示


nobody 1418 0.0 0.0 56048 3764 ? S 14:08 0:00 /usr/sbin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/var/run/NetworkManager/dnsmasq.pid --listen-address=127.0.1.1 --cache-size=0 --conf-file=/dev/null --proxy-dnssec --enable-dbus=org.freedesktop.NetworkManager.dnsmasq --conf-dir=/etc/NetworkManager/dnsmasq.d



================================================================================

## 測試

執行


$ dig www.google.com



顯示


; <<>> DiG 9.10.3-P4-Ubuntu <<>> www.google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 16041
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 3072
;; QUESTION SECTION:
;www.google.com. IN A

;; ANSWER SECTION:
www.google.com. 265 IN A 216.58.200.228

;; Query time: 18 msec
;; SERVER: 127.0.1.1#53(127.0.1.1)
;; WHEN: Fri Sep 29 17:17:11 CST 2017
;; MSG SIZE rcvd: 59



執行


$ dig www.google.com @127.0.1.1



顯示



; <<>> DiG 9.10.3-P4-Ubuntu <<>> www.google.com @127.0.1.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55532
;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 3072
;; QUESTION SECTION:
;www.google.com. IN A

;; ANSWER SECTION:
www.google.com. 205 IN A 74.125.23.106
www.google.com. 205 IN A 74.125.23.104
www.google.com. 205 IN A 74.125.23.99
www.google.com. 205 IN A 74.125.23.103
www.google.com. 205 IN A 74.125.23.105
www.google.com. 205 IN A 74.125.23.147

;; Query time: 18 msec
;; SERVER: 127.0.1.1#53(127.0.1.1)
;; WHEN: Fri Sep 29 17:18:10 CST 2017
;; MSG SIZE rcvd: 139




執行


$ dig +short www.google.com @127.0.1.1



顯示


216.58.200.228



================================================================================

待續...

10/2 15:45:32
應用擴展 工具箱
回覆: 關於「dnsmasq」的操作使用
會員五級
註冊日期:
2012/4/22 10:50
所屬群組:
已註冊使用者
等級: 32
HP : 158 / 790
MP : 483 / 12698
EXP: 60
離線
先簡單探索「dnsmasq」相關的套件。

================================================================================

執行


$ whereis dnsmasq



顯示


dnsmasq: /usr/sbin/dnsmasq /etc/dnsmasq.d /usr/share/man/man8/dnsmasq.8.gz



================================================================================

執行


$ dpkg -S /usr/sbin/dnsmasq



顯示


dnsmasq-base: /usr/sbin/dnsmasq



================================================================================

執行


$ dpkg -l '*dnsmasq*'



顯示


Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-=============================-===================-===================-======
un dnsmasq <none> <none> (no description available)
ii dnsmasq-base 2.75-1ubuntu0.16.04 amd64 Small caching DNS proxy and DHCP/TFTP server



系統一開始只有安裝「dnsmasq-base」。

================================================================================

執行


$ apt-cache showsrc dnsmasq | grep '^Binary:' -B 1



顯示


Package: dnsmasq
Binary: dnsmasq, dnsmasq-base, dnsmasq-utils



================================================================================

執行


$ dpkg -L dnsmasq-base | sort



顯示


/.
/etc
/etc/dbus-1
/etc/dbus-1/system.d
/etc/dbus-1/system.d/dnsmasq.conf
/usr
/usr/sbin
/usr/sbin/dnsmasq
/usr/share
/usr/share/dnsmasq-base
/usr/share/dnsmasq-base/trust-anchors.conf
/usr/share/doc
/usr/share/doc/dnsmasq-base
/usr/share/doc/dnsmasq-base/changelog.Debian.gz
/usr/share/doc/dnsmasq-base/copyright
/usr/share/doc/dnsmasq-base/DBus-interface.gz
/usr/share/doc/dnsmasq-base/doc.html
/usr/share/doc/dnsmasq-base/examples
/usr/share/doc/dnsmasq-base/examples/dnsmasq.conf.example
/usr/share/doc/dnsmasq-base/FAQ.gz
/usr/share/doc/dnsmasq-base/README.Debian
/usr/share/doc/dnsmasq-base/setup.html
/usr/share/man
/usr/share/man/es
/usr/share/man/es/man8
/usr/share/man/es/man8/dnsmasq.8.gz
/usr/share/man/fr
/usr/share/man/fr/man8
/usr/share/man/fr/man8/dnsmasq.8.gz
/usr/share/man/man8
/usr/share/man/man8/dnsmasq.8.gz
/var
/var/lib
/var/lib/misc
/var/run



================================================================================


待續...

10/2 15:56:13
應用擴展 工具箱
回覆: 關於「dnsmasq」的操作使用
會員五級
註冊日期:
2012/4/22 10:50
所屬群組:
已註冊使用者
等級: 32
HP : 158 / 790
MP : 483 / 12698
EXP: 60
離線
接下來紀錄跟「D-Bus」相關的操作。

================================================================================

## package

* qtchooser
* qdbus
* qdbus-qt5
* dnsmasq-base

## manpage

* $ man qdbus
* $ man dnsmasq

================================================================================

## 文件


$ dpkg -L dnsmasq-base | grep -i dbus



顯示


/etc/dbus-1
/etc/dbus-1/system.d
/etc/dbus-1/system.d/dnsmasq.conf
/usr/share/doc/dnsmasq-base/DBus-interface.gz



執行下面指令,觀看「/usr/share/doc/dnsmasq-base/DBus-interface.gz」。


$ less /usr/share/doc/dnsmasq-base/DBus-interface.gz



註: 上面「less」,可以改成「man」,「view」,「vim

================================================================================

以下是操作步驟

註: 以下以「qdbus」這個工具來當範例操作,
其他類似的指令工具有「gdbus」,「dbus-send」,或是「d-feet」這個圖形界面工具。

之前相關討論有

* #3 回覆: 請教一個弱弱的問題,為什麼有些ubuntu的C code有"C"的圖示
* #4 回覆: dconf-editor 打不開節點
* #2 回覆: fcitx chewing 在右方數字鍵無法選字

================================================================================

執行


$ qdbus | grep dns



沒有任何顯示,跳到下一個提示字元

執行


$ qdbus --system | grep dns



顯示


org.freedesktop.NetworkManager.dnsmasq



================================================================================

執行


$ sudo qdbus --system org.freedesktop.NetworkManager.dnsmasq



顯示


/
/uk
/uk/org
/uk/org/thekelleys
/uk/org/thekelleys/dnsmasq



================================================================================

執行


$ sudo qdbus --system org.freedesktop.NetworkManager.dnsmasq /uk/org/thekelleys/dnsmasq



顯示


method QString org.freedesktop.DBus.Introspectable.Introspect()
signal void org.freedesktop.NetworkManager.dnsmasq.DhcpLeaseAdded(QString ipaddr, QString hwaddr, QString hostname)
signal void org.freedesktop.NetworkManager.dnsmasq.DhcpLeaseDeleted(QString ipaddr, QString hwaddr, QString hostname)
signal void org.freedesktop.NetworkManager.dnsmasq.DhcpLeaseUpdated(QString ipaddr, QString hwaddr, QString hostname)
method void org.freedesktop.NetworkManager.dnsmasq.AddDhcpLease(QString ipaddr, QString hwaddr, QByteArray hostname, QByteArray clid, uint lease_duration, uint ia_id, bool is_temporary)
method void org.freedesktop.NetworkManager.dnsmasq.ClearCache()
method bool org.freedesktop.NetworkManager.dnsmasq.DeleteDhcpLease(QString ipaddr)
method QStringList org.freedesktop.NetworkManager.dnsmasq.GetLoopServers()
method QString org.freedesktop.NetworkManager.dnsmasq.GetVersion()
method void org.freedesktop.NetworkManager.dnsmasq.SetBogusPrivOption(bool boguspriv)
method void org.freedesktop.NetworkManager.dnsmasq.SetDomainServers(QStringList servers)
method void org.freedesktop.NetworkManager.dnsmasq.SetFilterWin2KOption(bool filterwin2k)
method void org.freedesktop.NetworkManager.dnsmasq.SetServers(QVariantList servers)
method void org.freedesktop.NetworkManager.dnsmasq.SetServersEx({D-Bus type "aas"} servers)



================================================================================

執行


$ sudo qdbus --system org.freedesktop.NetworkManager.dnsmasq /uk/org/thekelleys/dnsmasq org.freedesktop.DBus.Introspectable.Introspect



顯示


<!DOCTYPE node PUBLIC "-//freedesktop//DTD D-BUS Object Introspection 1.0//EN"
"http://www.freedesktop.org/standards/dbus/1.0/introspect.dtd">
<node name="/uk/org/thekelleys/dnsmasq">
  <interface name="org.freedesktop.DBus.Introspectable">
    <method name="Introspect">
      <arg name="data" direction="out" type="s"/>
    </method>
  </interface>
  <interface name="org.freedesktop.NetworkManager.dnsmasq">
    <method name="ClearCache">
    </method>
    <method name="GetVersion">
      <arg name="version" direction="out" type="s"/>
    </method>
    <method name="GetLoopServers">
      <arg name="server" direction="out" type="as"/>
    </method>
    <method name="SetServers">
      <arg name="servers" direction="in" type="av"/>
    </method>
    <method name="SetDomainServers">
      <arg name="servers" direction="in" type="as"/>
    </method>
    <method name="SetServersEx">
      <arg name="servers" direction="in" type="aas"/>
    </method>
    <method name="SetFilterWin2KOption">
      <arg name="filterwin2k" direction="in" type="b"/>
    </method>
    <method name="SetBogusPrivOption">
      <arg name="boguspriv" direction="in" type="b"/>
    </method>
    <signal name="DhcpLeaseAdded">
      <arg name="ipaddr" type="s"/>
      <arg name="hwaddr" type="s"/>
      <arg name="hostname" type="s"/>
    </signal>
    <signal name="DhcpLeaseDeleted">
      <arg name="ipaddr" type="s"/>
      <arg name="hwaddr" type="s"/>
      <arg name="hostname" type="s"/>
    </signal>
    <signal name="DhcpLeaseUpdated">
      <arg name="ipaddr" type="s"/>
      <arg name="hwaddr" type="s"/>
      <arg name="hostname" type="s"/>
    </signal>
    <method name="AddDhcpLease">
       <arg name="ipaddr" type="s"/>
       <arg name="hwaddr" type="s"/>
       <arg name="hostname" type="ay"/>
       <arg name="clid" type="ay"/>
       <arg name="lease_duration" type="u"/>
       <arg name="ia_id" type="u"/>
       <arg name="is_temporary" type="b"/>
    </method>
    <method name="DeleteDhcpLease">
       <arg name="ipaddr" type="s"/>
       <arg name="success" type="b" direction="out"/>
    </method>
  </interface>
</node>



================================================================================

執行


$ sudo qdbus --system org.freedesktop.NetworkManager.dnsmasq /uk/org/thekelleys/dnsmasq org.freedesktop.NetworkManager.dnsmasq.GetVersion



顯示


2.75



執行


$ dnsmasq -v



或是執行


$ dnsmasq --version



顯示


Dnsmasq version 2.75 Copyright (c) 2000-2015 Simon Kelley
Compile time options: IPv6 GNU-getopt DBus i18n IDN DHCP DHCPv6 no-Lua TFTP conntrack ipset auth DNSSEC loop-detect inotify

This software comes with ABSOLUTELY NO WARRANTY.
Dnsmasq is free software, and you are welcome to redistribute it
under the terms of the GNU General Public License, version 2 or 3.



================================================================================


待續...

10/2 16:00:06
應用擴展 工具箱
回覆: 關於「dnsmasq」的操作使用
會員五級
註冊日期:
2012/4/22 10:50
所屬群組:
已註冊使用者
等級: 32
HP : 158 / 790
MP : 483 / 12698
EXP: 60
離線
$ man gdbus

================================================================================

執行


$ sudo gdbus introspect --system --dest org.freedesktop.NetworkManager.dnsmasq --object-path / --recurse --only-properties



顯示


node / {
  node /uk {
    node /uk/org {
      node /uk/org/thekelleys {
        node /uk/org/thekelleys/dnsmasq {
        };
      };
    };
  };
};



================================================================================

執行


$ sudo gdbus introspect --system --dest org.freedesktop.NetworkManager.dnsmasq --object-path / --recurse



顯示


node / {
  node /uk {
    node /uk/org {
      node /uk/org/thekelleys {
        node /uk/org/thekelleys/dnsmasq {
          interface org.freedesktop.DBus.Introspectable {
            methods:
              Introspect(out s data);
            signals:
            properties:
          };
          interface org.freedesktop.NetworkManager.dnsmasq {
            methods:
              ClearCache();
              GetVersion(out s version);
              GetLoopServers(out as server);
              SetServers(in  av servers);
              SetDomainServers(in  as servers);
              SetServersEx(in  aas servers);
              SetFilterWin2KOption(in  b filterwin2k);
              SetBogusPrivOption(in  b boguspriv);
              AddDhcpLease(in  s ipaddr,
                           in  s hwaddr,
                           in  ay hostname,
                           in  ay clid,
                           in  u lease_duration,
                           in  u ia_id,
                           in  b is_temporary);
              DeleteDhcpLease(in  s ipaddr,
                              out b success);
            signals:
              DhcpLeaseAdded(s ipaddr,
                             s hwaddr,
                             s hostname);
              DhcpLeaseDeleted(s ipaddr,
                               s hwaddr,
                               s hostname);
              DhcpLeaseUpdated(s ipaddr,
                               s hwaddr,
                               s hostname);
            properties:
          };
        };
      };
    };
  };
};



================================================================================


$ sudo gdbus call --system --dest org.freedesktop.NetworkManager.dnsmasq --object-path /uk/org/thekelleys/dnsmasq --method org.freedesktop.NetworkManager.dnsmasq.GetVersion



顯示


('2.75',)



================================================================================

待續...

10/2 16:02:09
應用擴展 工具箱
回覆: 關於「dnsmasq」的操作使用
會員五級
註冊日期:
2012/4/22 10:50
所屬群組:
已註冊使用者
等級: 32
HP : 158 / 790
MP : 483 / 12698
EXP: 60
離線
$ man dbus-send

================================================================================

執行


$ sudo dbus-send --system --print-reply --dest=org.freedesktop.NetworkManager.dnsmasq /uk/org/thekelleys/dnsmasq org.freedesktop.NetworkManager.dnsmasq.GetVersion



顯示


method return time=1506673283.411986 sender=:1.19 -> destination=:1.126 serial=87 reply_serial=2
string "2.75"



================================================================================

待續...

10/2 16:05:19
應用擴展 工具箱
回覆: 關於「dnsmasq」的操作使用
會員五級
註冊日期:
2012/4/22 10:50
所屬群組:
已註冊使用者
等級: 32
HP : 158 / 790
MP : 483 / 12698
EXP: 60
離線
接下來探索「dnsmasq」從「NetworkManager」啟動的部份

================================================================================

$ man NetworkManager.conf

可以在「MAIN SECTION」找到「dns」那部份的說明。


       dns
           Set the DNS (resolv.conf) processing mode.

           default: The default if the key is not specified. NetworkManager will update resolv.conf to reflect the nameservers provided by
           currently active connections.

           dnsmasq: NetworkManager will run dnsmasq as a local caching nameserver, using a "split DNS" configuration if you are connected
           to a VPN, and then update resolv.conf to point to the local nameserver.

           unbound: NetworkManager will talk to unbound and dnssec-triggerd, providing a "split DNS" configuration with DNSSEC support. The
           /etc/resolv.conf will be managed by dnssec-trigger daemon.

           none: NetworkManager will not modify resolv.conf. This implies rc-manager unmanaged




執行


$ cat /etc/NetworkManager/NetworkManager.conf



顯示


[main]
plugins=ifupdown,keyfile,ofono
dns=dnsmasq

[ifupdown]
managed=false




================================================================================

執行


$ ps aux | grep NetworkManager



顯示


root 1039 0.0 0.2 378508 12540 ? Ssl 14:08 0:00 /usr/sbin/NetworkManager --no-daemon
nobody 1418 0.0 0.0 56048 3764 ? S 14:08 0:00 /usr/sbin/dnsmasq --no-resolv --keep-in-foreground --no-hosts --bind-interfaces --pid-file=/var/run/NetworkManager/dnsmasq.pid --listen-address=127.0.1.1 --cache-size=0 --conf-file=/dev/null --proxy-dnssec --enable-dbus=org.freedesktop.NetworkManager.dnsmasq --conf-dir=/etc/NetworkManager/dnsmasq.d
root 11868 0.0 0.0 16120 3684 ? S 16:24 0:00 /sbin/dhclient -d -q -sf /usr/lib/NetworkManager/nm-dhcp-helper -pf /var/run/dhclient-enp4s0.pid -lf /var/lib/NetworkManager/dhclient-9c932cba-b250-30b4-9abf-fd4fe124bd12-enp4s0.lease -cf /var/lib/NetworkManager/dhclient-enp4s0.conf enp4s0



執行


$ pstree -p 1039



顯示


NetworkManager(1039)─┬─dhclient(11868)
                     ├─dnsmasq(1418)
                     ├─{gdbus}(1236)
                     └─{gmain}(1215)



================================================================================

執行


$ whereis NetworkManager



顯示


NetworkManager: /usr/sbin/NetworkManager /usr/lib/NetworkManager /etc/NetworkManager /usr/share/man/man8/NetworkManager.8.gz



執行


$ dpkg -S /usr/sbin/NetworkManager



顯示


network-manager: /usr/sbin/NetworkManager



執行


$ apt-get source network-manager



會下載下面三個檔案

* network-manager_1.2.6-0ubuntu0.16.04.1.debian.tar.xz
* network-manager_1.2.6.orig.tar.xz
* network-manager_1.2.6-0ubuntu0.16.04.1.dsc

並且解開到「network-manager-1.2.6」這個資料夾

================================================================================

執行下面指令,使用「dnsmasq」當關鍵字,找尋相關的檔案


$ grep 'dnsmasq' network-manager-1.2.6/* -R -n



顯示很多,就不列出來了。

執行下面指令,使用「127.0.1.1」當關鍵字,找尋相關的檔案


$ grep '127.0.1.1' network-manager-1.2.6/* -R -n



顯示


network-manager-1.2.6/debian/changelog:2108:    dnsmasq (and bind) plugins should listen on for DNS resolution to 127.0.1.1,
network-manager-1.2.6/debian/patches/nm-change-dnsmasq-parameters.diff:25:+     argv[idx++] = "--listen-address=127.0.1.1"; /* Should work for both 4 and 6 */
network-manager-1.2.6/debian/patches/nm-change-dnsmasq-parameters.diff:39:+     /* If caching was successful, we only send 127.0.1.1 to /etc/resolv.conf
network-manager-1.2.6/debian/patches/nm-change-dnsmasq-parameters.diff:48:+             nameservers[0] = g_strdup ("127.0.1.1");
network-manager-1.2.6/debian/patches/nm-change-dnsmasq-parameters.diff:57:+      * pointing to 127.0.1.1 if any plugins were active.  Thus update
network-manager-1.2.6/src/dns-manager/nm-dns-dnsmasq.c:534:     argv[idx++] = "--listen-address=127.0.1.1"; /* Should work for both 4 and 6 */
network-manager-1.2.6/src/dns-manager/nm-dns-manager.c:1164:    /* If caching was successful, we only send 127.0.1.1 to /etc/resolv.conf
network-manager-1.2.6/src/dns-manager/nm-dns-manager.c:1172:            nameservers[0] = g_strdup ("127.0.1.1");
network-manager-1.2.6/src/dns-manager/nm-dns-manager.c:1757:     * pointing to 127.0.1.1 if any plugins were active.  Thus update



執行


$ grep 'listen-address=127.0.1.1' network-manager-1.2.6/src/dns-manager/nm-dns-dnsmasq.c -R -n -A 5 -B 7



顯示


527-
528-    argv[idx++] = dm_binary;
529-    argv[idx++] = "--no-resolv";  /* Use only commandline */
530-    argv[idx++] = "--keep-in-foreground";
531-    argv[idx++] = "--no-hosts"; /* don't use /etc/hosts to resolve */
532-    argv[idx++] = "--bind-interfaces";
533-    argv[idx++] = "--pid-file=" PIDFILE;
534:    argv[idx++] = "--listen-address=127.0.1.1"; /* Should work for both 4 and 6 */
535-    argv[idx++] = "--cache-size=0";
536-    argv[idx++] = "--conf-file=/dev/null"; /* avoid loading /etc/dnsmasq.conf */
537-    argv[idx++] = "--proxy-dnssec"; /* Allow DNSSEC to pass through */
538-    argv[idx++] = "--enable-dbus=" DNSMASQ_DBUS_SERVICE;
539-



以上先簡單探索到這。

================================================================================

暫告一段落

報告完畢


10/2 16:22:19
應用擴展 工具箱
回覆: 關於「dnsmasq」的操作使用
會員五級
註冊日期:
2012/4/22 10:50
所屬群組:
已註冊使用者
等級: 32
HP : 158 / 790
MP : 483 / 12698
EXP: 60
離線
抱歉,此回覆內容,貼錯了討論串,所以刪除

Orz...

10/6 15:32:29
應用擴展 工具箱


 [無發表權] 請登錄或者註冊


可以查看帖子.
不可發帖.
不可回覆.
不可編輯自己的帖子.
不可刪除自己的帖子.
不可發起投票調查.
不可在投票調查中投票.
不可上傳附件.
不可不經審核直接發帖.