最近在RK3568上進行開發測試,需要測試一下網絡環境,能否通過瀏覽器訪問外部網絡。測試情況如下:
1、ping內網、網關ip能ping通
2、ping外網ping不通
情況分析:
1、ping外網失敗(ping 8.8.8.8也ping不通,說明不是dns域名解析的問題)
2、通過ifconfig命令查看網絡配置,可以看到有兩個網絡接口
其中eth5走內網,通過網線與ipc攝像頭直接連接
eth3走外網,連接公司的交換機,能通外網
3、以下文章中的描述和我目前的情況類似,于是猜測可能是因為有多個網卡而存在多個默認網關導致訪問外部網絡時所使用的網關不明確
在Linux系統中,雙網卡或多網卡上網并不會同時使用兩者同時上網,只會優先把請求發送到優先級高的默認網關(對應網卡的內網網段除外)。插入多個網卡的時候,路由表中就會存在多個默認網關,訪問外部網絡的時候,系統根據路由原則,
Metric
值小的網卡優先級高,會優先使用該網卡上網。——?Linux網卡優先級配置及同時訪問內外網設置 - 軼哥
這篇文章也有描述類似的問題:Linux雙網卡默認路由優先級設置不正確,導致網絡不通問題定位_metric 101-CSDN博客
4、通過ip route命令查看系統的路由表
解釋:
default:默認路由(用于訪問外網)
via:下一跳(網關 IP)
可以看到確實存在兩個默認路由(有兩個default),而192.168.1.1走的是內網(連接了ipc攝像頭),所以可能就是因為在ping外網時使用了內網網關導致ping失敗
5、于是通過命令sudo ip route del default via 192.168.1.1 dev eth4刪除192.168.1.1所在路由(因為該路由只是用于連接ipc攝像機,不需要用來訪問外網,所以可以刪除),刪除后再嘗試ping外網,這次能ping通了
(路由的作用就是用來實現不同子網之間的通信,192.168.1.1所在路由只是連接了ipc攝像頭所以不能訪問其他網絡,可以刪除)
6、為什么存在兩個默認路由?
在我的系統中配置了兩個網絡接口,一個網口(eth3)接的網線,能訪問外部網絡;另一個網口(eth5)連接的是ipc攝像頭,屬于局域網。接網線的網口自動分配了默認路由,而ipc攝像頭的我是配置了靜態ip,配置文件/etc/network/interfaces如下:
因為配置了GateWay網關,所以會自動生成默認路由。
在上面通過sudo ip route del default via 192.168.1.1 dev eth4刪除路由后,reboot重啟后還是會重新生成默認路由,需要在/etc/network/interfaces文件中把GateWay注釋掉,這樣就不會生成默認網關了