1、通过文件配置Ubuntu设备网口
在Ubuntu工控机上,通过文件配置网口(网络接口)可以让网络配置在每次系统启动时自动生效。以下是常见的方法步骤:
1.1 使用 netplan
配置网口(Ubuntu 18.04 及以上版本)
-
编辑
netplan
配置文件:netplan
的配置文件通常位于/etc/netplan/
目录下,文件名通常是01-netcfg.yaml
或者类似的.yaml
文件。打开该文件进行编辑:
sudo nano /etc/netplan/01-netcfg.yaml
-
配置网口: 在文件中添加或修改如下内容,假设你要配置的是
eth0
网口,并且希望它有静态 IP 地址:network: version: 2 renderer: networkd ethernets: <eth0>: dhcp4: no addresses: - 192.168.1.100/24 gateway4: 192.168.1.1 nameservers: addresses: - 8.8.8.8 - 8.8.4.4
eth0
需要配置的网口,根据实际换成自己设备的网口dhcp4: no
表示关闭 DHCP。addresses:
配置静态 IP 地址和子网掩码。gateway4:
配置网关。nameservers:
配置 DNS 服务器地址。
1.2 使用 ifupdown
配置网口(Ubuntu 16.04 及以下版本)
Ubuntu 16.04 及之前的版本使用 /etc/network/interfaces
文件来配置网口。
-
编辑
/etc/network/interfaces
文件: 打开该文件进行编辑:sudo nano /etc/network/interfaces
-
配置网口: 在文件中添加或修改如下内容,假设你要配置的是
eth0
网口:-
如果是静态 IP:
auto eth0 iface eth0 inet static address 192.168.1.100 netmask 255.255.255.0 gateway 192.168.1.1 dns-nameservers 8.8.8.8 8.8.4.4
-
如果是动态 IP(通过 DHCP 获取 IP):
auto eth0 iface eth0 inet dhcp
-
-
重启网络服务: 保存文件后,使用以下命令重启网络服务使配置生效:
sudo systemctl restart networking
1.3 验证配置
你可以使用 ifconfig
或 ip a
命令来检查网口的配置是否正确生效。例如:
ip a
这两种方法分别适用于不同的 Ubuntu 版本。你可以根据自己的系统版本选择合适的方式。
2、使用python搭建一个web服务
要使用 Python 搭建一个 Web 服务,允许远程修改 netplan
网络配置并在没有新的 Web 访问后一分钟内恢复原始配置,可以使用 Flask
框架和定时任务来实现。以下是详细步骤:
2.1 后端python脚本
2.1.1 项目依赖
因为python脚本编辑/etc路径下文件,脚本需要在root权限下运行,因此安装依赖首先需要获取root权限:
sudo -i
安装依赖:
首先,你需要安装 Flask
框架和 schedule
模块(用于定时任务),以及确保工控机有权限修改网络配置,。
pip3 install flask flask-cors schedule
2.1.2 Python 代码实现
以下是一个完整的 Python 脚本示例,该脚本包含:
- 启动一个 Flask Web 服务,用于接收网络配置修改请求。
- 使用定时任务,在没有新的 Web 访问后 60 秒内恢复为原始配置。
#!/usr/bin/env python3
import os
import time
import shutil
import threading
from flask import Flask, request, jsonify
from flask_cors import CORS
import schedule
import subprocess
import re
app = Flask(__name__)
CORS(app) # 启用 CORS 允许跨域请求
# 全局变量,用来保存最后一次修改时间
last_access_time = time.time()
# 保存原始的 netplan 配置文件路径
netplan_file = "/etc/netplan/01-network-manager-all.yaml"
backup_file = "/etc/netplan/01-network-manager-all.yaml.bak"
change_config = False
revisit = False
# 备份原始配置
def backup_netplan():
# if not os.path.exists(backup_file):
shutil.copy(netplan_file, backup_file)
print("Netplan configuration backed up.")
# 定时器:在 60 秒后没有新的请求访问时恢复配置
def restore_config_if_needed():
global last_access_time
global change_config
global revisit
if not change_config:
return
if revisit:
backup_netplan()
print("Netplan configuration already in effect.")
change_config = False
revisit = False
# 计算当前时间距离上次访问的时间差
time_since_last_access = time.time() - last_access_time
if time_since_last_access > 60:
# 恢复原始配置
if os.path.exists(backup_file):
shutil.copy(backup_file, netplan_file)
change_config = False
# 应用 netplan 配置
os.system("sudo netplan apply")
print("Netplan configuration restored to original.")
# 启动一个独立线程来定时检查恢复配置
def schedule_checker():
while True:
schedule.run_pending()
time.sleep(1)
def get_current_ip():
"""获取系统当前设置的 IP 地址"""