天天看點

ubuntu20 開機啟動_Ubuntu20.04 雙網卡 共享上網解決方案

ubuntu20 開機啟動_Ubuntu20.04 雙網卡 共享上網解決方案

困擾我很多天的問題在今天加班的時候終于解決了,很開心!費了這麼大精力才弄出來,當然要記錄下來,以防下次再用,嘻嘻~

需求

首先來說一下我們的需求:

1、一台裝有Ubuntu20.04 server系統的電腦

2、一台Ubuntu server系統的電腦(該電腦上Ubuntu系統版本任意)

3、裝有Ubuntu20.04 server系統的電腦上有一個無線網卡,一個有限網卡,我們想讓該電腦的無線網卡連接配接外網,使用網線連接配接到另一台電腦,使得另一台電腦可以上網。

Ubuntu20.04 server系統的配置

1、配置網絡資訊

從網上搜集了很長時間,很多都是修改/etc/network/interfaces檔案,這種方式在Ubuntu17之後就不适用了,之後的系統都使用netplan來管理網絡,是以我們要修改的是/etc/netplan目錄下以.yaml為字尾的檔案,以下内容為我系統中的配置

network:
  renderer: networkd   #
  ethernets:      # 有線配置
   enx00e04c00f946:    #指定需配置網絡接口的名稱
      dhcp4: true   #是否打開 IPv4 的 dhcp。
      addresses: [192.168.10.1/24]   #定義網絡接口的靜态 IP 位址

  wifis:   #無線配置
    wlan0:   #無線網絡接口名稱
      dhcp4: true   #是否打開IPV4的dhcp
      access-points:  
         "TP-LINK":  #連接配接的無線的名稱
             password: "123123123"  #連接配接的無線的密碼

  version: 2
           

我們在配置網絡之前可以使用ifconfig指令來檢視一下網卡名稱

配置完成後,我們可以使用以下指令來進行啟動

netplan apply
           
2、開啟路由轉發功能

Linux系統本身就有IP資料包轉發的功能,但是預設情況下是關閉的,你需要通過修改配置檔案來啟動這個功能,修改/etc/sysctl.conf檔案,将net.ipv4.ip_forward=1前面的注釋去掉。

ubuntu20 開機啟動_Ubuntu20.04 雙網卡 共享上網解決方案
3、添加路由表使得兩個網卡之間可以通信

依次在指令行中執行以下指令

iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
iptables -A FORWARD -i wlan0 -o enx00e04c00f946 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i wlan0 -o enx00e04c00f946 -j ACCEPT
           

接下來就是要儲存這些規則

iptables-save > /etc/iptables.rules
           

另一台電腦網絡配置

相比較而言,這一台電腦的網絡配置就簡單多了,把有線網卡也設定成和上一台電腦有限網卡處于同一網絡的靜态ip就可以,如何設定靜态ip在第二部分已經講了,這裡就不多做介紹了。

結果

這樣我們就可以進行通路了喲!

我們ping一下無線所在的網關,可以看到,已經通了

ubuntu20 開機啟動_Ubuntu20.04 雙網卡 共享上網解決方案

我又嘗試ping了一下www.baidu.com

但是沒有任何反應,這種情況一般是未配置dns,使用8.8.8.8或114.114.114.114或其他。

我們隻需要在/etc/resolve.conf檔案中加入下面這句話即可,加入dns

nameserver 8.8.8.8
           

優化

這樣配置Ubuntu20.04網絡資訊後,路由表規則雖然儲存下來,但是每次開機後需要自己手動重新開機,我想讓它開機時自動啟動,就進行了如下操作

1、建立rc.local檔案

由于Ubuntu20.04的/etc路徑下并沒有rc.local檔案,我們需要自己建立該檔案,并把想要啟動的指令放入該檔案中。

ubuntu20 開機啟動_Ubuntu20.04 雙網卡 共享上網解決方案
2、建立 rc-local.service 檔案

Ubuntu20.04 不能像16.04 那樣可以直接使用 /etc/rc.local 檔案,需要設定service

nano /etc/systemd/system/rc-local.service
           

以下為我的rc-local.service檔案中的内容

[Unit]
Description=/etc/rc.local Compatibility
ConditionFileIsExecutable=/etc/rc.local
After=network.target

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes
GuessMainPID=no

[Install]
WantedBy=multi-user.target
           
3、給rc.local權重限
chmod +x /etc/rc.local
           
4、啟用服務
systemctl enable rc-local
           

5、啟用服務并查詢服務狀态

systemctl start rc-local.service
systemctl status rc-local.service
           

在啟用服務的時候出現以下錯誤:

● rc-local.service - /etc/rc.local Compatibility
     Loaded: loaded (/etc/systemd/system/rc-local.service; enabled; vendor preset: enabled)
    Drop-In: /usr/lib/systemd/system/rc-local.service.d
             └─debian.conf
     Active: failed (Result: exit-code) since Sun 2020-05-24 09:36:11 UTC; 14s ago
    Process: 2611 ExecStart=/etc/rc.local start (code=exited, status=203/EXEC)

May 24 09:36:11 scope systemd[1]: Starting /etc/rc.local Compatibility...
May 24 09:36:11 scope systemd[2611]: rc-local.service: Failed to execute command: Permission denied
May 24 09:36:11 scope systemd[2611]: rc-local.service: Failed at step EXEC spawning /etc/rc.local: Permission denied
May 24 09:36:11 scope systemd[1]: rc-local.service: Control process exited, code=exited, status=203/EXEC
May 24 09:36:11 scope systemd[1]: rc-local.service: Failed with result 'exit-code'.
May 24 09:36:11 scope systemd[1]: Failed to start /etc/rc.local Compatibility.
           

經過查資料而知,是有shell的問題造成的。有些指令需要在bash shell中運作,而不能在dash中運作。

從Ubuntu 6.10開始,預設使用dash(theDebian Almquist Shell)而不是bash(the GNUBourne-Again Shell). 但Login Shell還是bash。

是以,在rc.local檔案開頭加上下面這句話即可

#!/bin/bash
           

繼續閱讀