一種解決 OpenWrt 安裝 docker 之后局域網的設備之間無法互相訪問通信的方法

文章目錄

  • 一、問題背景
  • 二、解決方案
    • (方法一)修改全局設置的 轉發( forward) 為 接受(ACCEPT)
    • (方法二)設置 net.bridge.bridge-nf-call-iptables=0 并將 docker 的容器網絡設置為host
  • 三、原因探析
    • (一)確認無法訪問
    • (二)使用 tcpdump 檢查流量
    • (三)檢查防火墻配置
  • 四、為什么安裝 docker 之后才會出現這樣的問題呢

一、問題背景

參考 OpenWrt as Docker container host 官方的教程,可以知道只要安裝了 luci-app-dockerman luci包,即可在 OpenWrt 上運行 docker,隨后就可以安裝各類鏡像,并部署運行各類容器。

在這里插入圖片描述
luci-app-dockerman 包的位置位于:LuCI > 3. Applications > luci-app-dockerman,勾選編譯即可。

在這里插入圖片描述
但是,安裝新鏡像之后發現,局域網下的設備之間不能互相訪問通信了,而取消勾選luci-app-dockerman 包之后重新編譯安裝,即可互相訪問。因此可以推測,這個問題是因為安裝 docker 之后引起的問題。

本文將詳細探尋 OpenWrt 安裝 docker 之后局域網的設備之間無法互相訪問通信 的原因,并提出一種簡單的解決方案。

二、解決方案

限于筆者目前對 OpenWrt 了解還不夠深入,暫且用這些方式進行解決。

先直接說解決方案:

(方法一)修改全局設置的 轉發( forward) 為 接受(ACCEPT)

luci 管理界面,網絡 > 防火墻 > 防火墻 - 區域設置 > 常規設置 中,將 轉發 設置為 接受 即可,配置如下:
在這里插入圖片描述
也可以直接修改配置文件,在 /etc/config/firewall 文件中,在 defaults 的配置中修改 forward 屬性為 ACCEPT,相關代碼如下:

config defaultsoption input 'REJECT'option output 'ACCEPT'option forward 'ACCEPT'

(方法二)設置 net.bridge.bridge-nf-call-iptables=0 并將 docker 的容器網絡設置為host

由后文介紹可以知道,發生此問題是由于 docker 配置了 net.bridge.bridge-nf-call-iptables=1,導致原本隱式允許的 LAN 通信被顯示拒絕。因此我們可以修改 docker 創建出來的配置文件 /etc/sysctl.d/12-br-netfilter-ip.conf,將net.bridge.bridge-nf-call-ip6tables=1net.bridge.bridge-nf-call-iptables=1 注釋掉即可,代碼如下:

# Do not edit, changes to this file will be lost on upgrades
# /etc/sysctl.conf can be used to customize sysctl settings# enable bridge firewalling for docker
# net.bridge.bridge-nf-call-ip6tables=1
# net.bridge.bridge-nf-call-iptables=1

但此方法會導致 docker 中的 容器 不能使用 bridge 的網絡模式,因此需要將 docker 中的 容器 的網路模式都修改為 host

三、原因探析

(一)確認無法訪問

首先我們需要先找到一個合適的方法確認是否無法互相訪問,并確定出特征流量,方便通過流量去追蹤,因此我們選用 ping 命令,去 ping 另一個設備的 IP,檢查是否可以連通。可確定其是 ICMP 流量。

通過 ping DeviceIP 可以確定這兩個設備無法 ping 通,也即無法互相訪問
在這里插入圖片描述

(二)使用 tcpdump 檢查流量

tcpdump 是一個強大的命令行網絡抓包工具,可以獲取 OpenWrt 的指定接口的 流量。可以安裝 tcpdump 包,去獲取流量并進行分析。也可以在編譯的時候勾選 tcpdump 包,其路徑為 Network > tcpdump,如下:

在這里插入圖片描述
當安裝完 tcpdump 包之后,即可使用 tcpdump 命令進行抓包分析。

首先需要確認局域網的接口名,其需要在 tcpdump 被指定,用于抓取指定接口的網絡流量,例如 br.lan。隨后在命令之后再帶上 icmp 可以過濾 icmp 流量,進行分析。命令格式如下:

tcpdump -i br-lan icmp

通過此命令,可以看到有如下的打印:

21:04:30.316761 IP Device1.lan > OpenWrt.lan: ICMP echo request, id 21972, seq 227, length 11
21:04:30.316887 IP OpenWrt.lan > Device1.lan: ICMP echo reply, id 21972, seq 227, length 1121:04:30.738076 IP Device2.lan > OpenWrt.lan: ICMP echo request, id 4441, seq 308, length 11
21:04:30.738136 IP OpenWrt.lan > Device2.lan: ICMP echo reply, id 4441, seq 308, length 1121:04:35.799464 IP Device1.lan > Device2.lan: ICMP echo request, id 1, seq 93, length 40
21:04:35.803724 IP OpenWrt.lan > Device2.lan: ICMP Device1.lan protocol 1 port 21758 unreachable, length 68
21:04:35.803613 IP Device2.lan > Device1.lan: ICMP echo reply, id 1, seq 93, length 40

這段日志來可以被分成三部分:

第一部分是 Device1OpenWrtICMP 的流量,從 Device1.lan > OpenWrt.lan: ICMP echo requestOpenWrt.lan > Device1.lan: ICMP echo reply 可以看出 Device1OpenWrt 是可以正常訪問, ICMP 的流量可以正常通行。

第二部分是 Device2OpenWrtICMP 的流量,從 Device2.lan > OpenWrt.lan: ICMP echo requestOpenWrt.lan > Device2.lan: ICMP echo reply 可以看出 Device2OpenWrt 是可以正常訪問, ICMP 的流量可以正常通行。

而第三部分是 Device1.lanDevice2.lanICMP 的流量,可以看到 Device1.lan protocol 1 port 21758 unreachable,此時流量無法到達 Device2.lan,而是直接被路由器攔截了直接通信并返回了 unreachable 消息。

因此,這表明 OpenWrt 正在阻止 LAN 設備間的直接通信,而這點極有可能是因為 LAN 區域的轉發( Forward )策略可能被設置為拒絕( REJECT/DROP )

(三)檢查防火墻配置

通過命令 cat /etc/config/firewall 輸出防火墻的相關配置,可以得到如下結果:

config defaultsoption input 'REJECT'option output 'ACCEPT'option forward 'REJECT'config zoneoption name 'lan'option input 'ACCEPT'option output 'ACCEPT'option forward 'ACCEPT'list network 'lan'

可以看到,lanzoneforward 已經被設置為 ACCEPT (即 option forward 'ACCEPT'),但是全局配置中的 forward 被設置為了 REJECT(即 option forward 'REJECT'),因此可以推測出這里是無法相互訪問的原因。

四、為什么安裝 docker 之后才會出現這樣的問題呢

  1. Docker 自動創建的防火墻規則
    Docker 默認會修改 iptables 規則,在 /etc/firewall.user 或自定義鏈中插入規則,可能導致了覆蓋原有的 LAN 轉發規則 或者 創建新的 DOCKER-USER 鏈并設置默認策略為 DROP

  2. Docker 網絡接口的隔離特性
    Docker 創建的 docker0 網橋默認會:啟用 net.bridge.bridge-nf-call-iptables=1(讓橋接流量經過 iptables),此時觸發 OpenWrt 的默認 REJECT 策略,導致原本隱式允許的 LAN 通信被顯示拒絕。(參考:https://github.com/openwrt/packages/blob/master/utils/dockerd/files/etc/sysctl.d/sysctl-br-netfilter-ip.conf)
    而原始配置中,因 net.bridge.bridge-nf-call-iptables=0,雖然全局默認是 REJECT,但 br-lan 橋接流量繞過了 iptables

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/86662.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/86662.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/86662.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Leetcode百題斬-貪心

貪心也是一個很有意思的專題,能遇到很多神奇的思路。 但這個專題,leetcode也沒放Hard,果然是怕這種玄學專題上點難度大家罩不住。那就很快了,直接過 763. Partition Labels[Medium] 思路:將字母串分組,相…

基于多徑信道的分集接收技術性能優化與仿真分析

基于多徑信道的分集接收技術性能優化與仿真分析 一、多徑信道建模與仿真 1. 多徑信道建模(MATLAB實現) classdef MultipathChannel < handlepropertiesSampleRate = 1e6; % 采樣率 (Hz)MaxDoppler = 100; % 最大多普勒頻移 (Hz)DelayVector = [0

LeetCode 713.乘積小于K的子數組

給你一個整數數組 nums 和一個整數 k &#xff0c;請你返回子數組內所有元素的乘積嚴格小于 k 的連續子數組的數目。 示例 1&#xff1a; 輸入&#xff1a;nums [10,5,2,6], k 100 輸出&#xff1a;8 解釋&#xff1a;8 個乘積小于 100 的子數組分別為&#xff1a;[10]、[5…

打破網絡安全孤島:實現防御數據協作

作者&#xff1a;來自 Elastic Crossley McEwen, Oksana Abramovych 現代網絡戰場不再受組織邊界的限制。在各類防御網絡中&#xff0c;關鍵的結構化、非結構化和半結構化數據分布在不同的專業環境中&#xff0c;形成孤島 —— 從機密情報系統到作戰指揮平臺&#xff0c;再到戰…

給定一個沒有重復元素的數組,寫出生成這個數組的MaxTree的函數

題目&#xff1a; 給定一個沒有重復元素的數組arr&#xff0c;寫出生成這個數組的MaxTree的 函數&#xff0c;要求如果數組長度為N&#xff0c;則時間復雜度為O(N)、額外空間復雜度 為O(N)。 一個數組的MaxTree定義如下。 ● 數組必須沒有重復元素。 ● MaxTree是一棵二叉…

iOS 抓包實戰:時間戳偏差導致的數據同步異常排查記錄

“這條數據不是我填的”“我的更新被覆蓋了”“兩個設備顯示不一致”——這些是產品上線后最令人頭疼的反饋。 最近我們在一次用戶同步問題排查中&#xff0c;發現表面是“數據丟失”問題&#xff0c;實則是多端數據提交時間戳處理不一致&#xff0c;導致后臺認為老數據為新&a…

一款支持多日志器、多級別、多落地方式的同異步日志系統

文章目錄 簡介項目特點項目實現基礎功能模塊實現文件操作以及日期時間獲取日志等級日志信息描述 異步功能模塊實現緩沖區實現異步線程實現 核心功能模塊實現日志格式解析落地操作實現日志器實現 測試測試環境測試參數測試結果性能分析 附件 簡介 在現代軟件開發與系統運維領域…

加固筆記本在戶外勘探行業的應用:探索與科技的融合

在自然資源勘探、地質調查、石油天然氣開發、礦產資源測繪等戶外勘探行業中&#xff0c;作業環境常常復雜多變&#xff1a;風沙漫天的戈壁、雨雪交加的山區、濕熱潮濕的叢林&#xff0c;甚至是極寒與高溫并存的極端氣候條件。面對這些挑戰&#xff0c;普通的辦公設備早已無法勝…

MySQL 連接指定端口后,為什么實際仍是 3306?

文章目錄 MySQL 連接指定端口后&#xff0c;為什么實際仍是 3306&#xff1f;問題現象復現原因分析沒有指定 -h&#xff0c;默認走的是本地 Unix Socket多實例環境中未顯式指定目標地址 正確的連接方法方法一&#xff1a;添加 -h 127.0.0.1方法二&#xff1a;添加 --protocolTC…

【Android當用戶兩次打斷息屏操作后,屏幕將會在10分鐘內無法熄滅并持續點亮(關閉Android13新增的dim功能)】

UndimDetectorWakeLock持鎖導致屏幕不滅問題處理SOP 問題描述 在Android T版本中&#xff0c;系統新增了SCREEN_BRIGHT_WAKE_LOCK&#xff08;UndimDetectorWakeLock&#xff09;機制。當設備處于低亮度&#xff08;dim&#xff09;狀態時&#xff0c;用戶兩次打斷屏幕熄滅操…

Tailwind CSS自定義用法

文章目錄 前言? 一、集成 Tailwind CSS 到 React 項目1. 安裝依賴2. 配置 tailwind.config.js3. 創建全局樣式文件&#xff08;如 src/index.css&#xff09;tailwind base;tailwind components;tailwind utilities; 4. 在 main.tsx 或 main.jsx 中引入樣式 ? 二、自定義樣式…

linux面試常考

常用指令 常見題

Spring Boot 2.2.6調用DeepSeek API并通過SSE將流式響應推送給前端的完整實現

1. 添加依賴 (pom.xml) <dependencies><!-- Spring Boot Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- SSE 支持 --><depe…

LM1117-ADJ 簡單介紹

LM1117-ADJ是一款可調輸出電壓的低壓差線性穩壓器&#xff08;LDO&#xff09;&#xff0c;具有以下關鍵特性和應用要點&#xff1a; 核心特性 可調輸出電壓 通過外部分壓電阻&#xff08;R1和R2&#xff09;調節輸出電壓&#xff0c;范圍為1.25V至13.8V。輸出電壓公式&#…

知名流體控制解決方案供應商“永盛科技”與商派ShopeX達成B2B商城項目合作

2025年6月&#xff0c;全球知名的工業流體控制解決方案服務商——永盛科技&#xff08;股票&#xff1a;874497&#xff09;&#xff0c;與商派ShopeX正式達成B2B商城項目合作。 此次合作將共同推動永盛科技B2B業務的數字化變革&#xff0c;提高B2B業務運營效率&#xff0c;同…

jvm簡單八股

1、jvm中內存分為那幾個區域&#xff0c;1.7和1.8 jvm 中主要有 程序計數器、虛擬機棧、本地方法棧、堆、方法區、直接內存。 線程私有的有&#xff1a;程序計數器、虛擬機棧、本地方法棧 線程共有的有&#xff1a;堆、方法區、直接內存 堆空間又可以分為&#xff1a;新時代、…

contOS7安裝docker命令及yum源更換為國內源

docker介紹 Docker是一個開源的容器化平臺,通過將應用程序及其依賴打包成輕量級、可移植的容器,確保開發、測試和部署環境的一致性。Docker的核心概念包括容器、鏡像、Dockerfile和鏡像倉庫。容器是輕量級的虛擬化技術,共享宿主機內核但保持獨立運行環境,啟動快且資源占用少…

SpringBoot集成Redis-6.x版本流程

SpringBoot集成Redis是我們常見的功能&#xff0c;今天我們分享一下&#xff1a; 前言&#xff1a; 1、pom包引用 <!-- Redis Starter (默認使用 Lettuce) --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boo…

zookeeper Curator(3):Watch事件監聽

文章目錄 Curator API 常用操作 Watch事件監聽NodeCachePathChildrenCacheTreeCache 本章代碼已分享至Gitee: https://gitee.com/lengcz/curator01 Curator API 常用操作 Watch事件監聽 zookeeper 允許用戶在指定節點上注冊一些Watcher &#xff0c;并且在一些特定事件觸發的時…

多模態融合相機L3CAM

多模態融合相機L3CAM L3CAM是Beamagine公司推出的多模態傳感器融合技術&#xff0c;結合了激光雷達&#xff08;LiDAR&#xff09;和可見光攝像頭&#xff0c;旨在為自動駕駛、工業機器人和其他需要精確環境感知的應用場景提供高效、安全的解決方案。 L3CAM技術參數 L3CAM結合…