デフォルト値を設定dnsmasq.conf
し、デフォルトでは以下を除いて変更しませんでした。
listen-address=192.168.42.2
interface=veth1 # Also tried without
server=8.8.8.8
私の/etc/hosts
外観は次のとおりです。
127.0.0.1 test.testing.com
その後、次の名前空間を作成しました。
# ip netns add spacename
# ip link add veth0 type veth peer name veth1
# ip link set veth1 netns spacename
# ip addr add 192.168.42.1/24 dev veth0
# ip link set dev veth0 up
# ip netns exec spacename ip addr add 192.168.42.2/24 dev veth1
# ip netns exec spacename ip link set dev veth1 up
# ip netns exec spacename ip route add default via 192.168.42.1
# iptables -t nat -A POSTROUTING -s 192.168.42.0/24 -o eno1 -j MASQUERADE
# echo 1 > /proc/sys/net/ipv4/ip_forward
# ip netns exec spacename /bin/bash
(namespace)# echo 1 > /proc/sys/net/ipv4/ip_forward
これらすべてが素敵で素敵です。
以下で確認できます。
[root@arch Torxed]# ip netns list
spacename (id: 0)
ここから状況が変になります
名前空間内に永続シェルを作成し、dnsmasqを起動します。
# ip netns spacename /bin/bash
(namespace)# /usr/bin/dnsmasq -k --enable-dbus --user=dnsmasq --pid-file --log-queries --no-daemon
すべてがうまく始まりました。次のコマンドを実行してこれを確認しました。
(namespace)# ss -lun
State Recv-Q Send-Q Local Address:Port Peer Address:Port
UNCONN 0 0 0.0.0.0:53 0.0.0.0:*
UNCONN 0 0 [::]:53 [::]:*
「外部」の観点からは、ポートリスニングはありません。予想通り。しかし、私がするたびに:
(namespace)# dig test.testing.com @192.168.42.2
何もしません。しかし、私がするとき
# dig test.testing.com @192.168.42.2
;test.testing.com. IN A
;; ANSWER SECTION:
test.testing.com. 0 IN A 127.0.0.1
;; Query time: 0 msec
;; SERVER: 192.168.42.2#53(192.168.42.2)
;; WHEN: Sat Nov 24 19:58:37 CET 2018
;; MSG SIZE rcvd: 60
名前空間の外で動作します。
インターネットにはなぜ緑の地球があるのでしょうか?dnsmasqを実行している名前空間内で情報を掘り下げることはできませんか??
iptablesをもう一度確認しましたが、名前空間の内側と外側の両方が疑わしく見えません。
[root@arch Torxed]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
名前空間内でも同じように見えます。
また、私の名前空間IPをpingすることはできません。
(namespace)# ping 192.168.42.2 -c 1
PING 192.168.42.2 (192.168.42.2) 56(84) bytes of data.
--- 192.168.42.2 ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms
名前空間のもう一方の端(たとえば、「デフォルトドメイン」の受信者)に対するpingは有効です。
(namespace)# ping 192.168.42.1 -c 1
PING 192.168.42.1 (192.168.42.1) 56(84) bytes of data.
64 bytes from 192.168.42.1: icmp_seq=1 ttl=64 time=0.024 ms
--- 192.168.42.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
これは、ネームスペースが独自のネームスペースインターフェイスIPをpingできないことを意味します。
tcpdump -vv -n -i veth1
名前空間内でも試しました。割り当てられたIPにpingしようとすると、情報は提供されませんveth1
。しかし、ping veth0
(192.168.42.1)を行うと、問題なくパケットを受け取ります。
私は次のことを確認しました:
これらのどれも実際にこのようなことが起こる理由や回避策を説明していません。
チェックリスト
- 他の形式の接続はありません。
- iptables:
ACCEPT all -- anywhere anywhere
すべてのテーブル、チェーン、およびポリシーに適用されます。 DROPルールはありません。 - 他のファイアウォールはインストールまたはアクティブ化されません。
- すべてのインターフェイスが動作しています(再確認)。
- 名前空間を行き来するパスがあります(ルーティングテーブルが良く見えます)。
- Ping外部->~へアドレスエンジニアリング
- Ping~へ->外部アドレスエンジニアリング
- Ping~へ->~へするいいえ働く
- Ping外部->外部働く
私はどこで間違っていますか?
ベストアンサー1
答えを見ると、とても奇妙です。
名前空間デバイスがオフになっていることを除いて、loopback
すべてが正しいです。
すべてがローカルにルーティングされるため、lo
このインターフェイスも機能する必要があります。
# ip netns spacename ip link set up dev lo
# ip netns spacename ip addr add 127.0.0.1/8 dev lo
問題を解決する。TJ-
irc.freenoce.net/#ubuntuに感謝します。
00:51 < TJ-> DoXiD: "ip netns spacename ip link set up dev lo" :D --- it was down!
00:52 < TJ-> DoXiD: I knew it had something to do with the way localhost is handled, but I didn't look at the basics
00:53 < TJ-> DoXiD: anything routed inside the host uses lo