跳至主要內容

双网脚本

三思原创大约 4 分钟Linux双网脚本路由配置网络设置自动化Linux

本文介绍了如何临时添加和永久保存路由配置以实现双网脚本,包括在Ubuntu/Debian、CentOS/RHEL和树莓派上的操作步骤,帮助用户实现内网和外网之间的网络通信。

image
image

双网脚本

临时添加路由

#内网
sudo ip route add 192.168.0.0/16 via 192.168.175.65 dev eth0
sudo ip route add 10.0.0.0/8 via 192.168.175.65 dev eth0
#外网
sudo ip route add 0.0.0.0/0 via 192.168.8.1 dev eth1
ip route

如果希望在系统启动时自动执行上面的设置,只需要修改 rc.local。

sudo nano /etc/rc.local

然后将命令保存到 rc.local 文件中,如下:


echo "---------------------------------" >> /var/log/rc.local.log
date >> /var/log/rc.local.log
exec >> /var/log/rc.local.log 2>&1

max_attempts=30
current_attempt=0

# Function to check if eth0 is assigned the expected IP address
check_eth0_ip() {
    if ifconfig eth0 | grep -q "inet 192.168.28.209"; then
        return 0  # Success, eth0 has the expected IP address
    else
        return 1  # Failure, eth0 does not have the expected IP address
    fi
}

# Wait until eth0 gets the expected IP address or maximum attempts reached
while [ $current_attempt -lt $max_attempts ]; do
    if check_eth0_ip; then
        echo "eth0 has been assigned the expected IP address."
        break
    else
        echo "Waiting for eth0 to be assigned the expected IP address..."
        sleep 5
        current_attempt=$((current_attempt+1))
    fi
done

# Check if maximum attempts reached
if [ $current_attempt -eq $max_attempts ]; then
    echo "Maximum attempts reached. eth0 did not get the expected IP address."
fi


exec >> /var/log/rc.local.log 2>&1
ip route add 192.168.0.0/16 via 192.168.175.65 dev eth0
ip route add 10.0.0.0/8 via 192.168.175.65 dev eth0
ip route add 0.0.0.0/0 via 192.168.8.1 dev eth1

echo "end" >> /var/log/rc.local.log
echo "---------------------------------" >> /var/log/rc.local.log

永久保存路由配置

在很多 Linux 发行版中,你可以通过编辑网络配置文件来永久保存路由配置。

  • Ubuntu / Debian:编辑 /etc/network/interfaces​​ 文件:

    auto eth0
    iface eth0 inet static
      address 192.168.28.209
      netmask 255.255.255.192
      gateway 192.168.175.65
      dns-nameservers 202.107.117.11
      post-up ip route add 192.168.0.0/16 via 192.168.175.65 dev eth0
      post-up ip route add 10.0.0.0/8 via 192.168.175.65 dev eth0
    auto eth1
    iface eth1 inet dhcp
      post-up ip route add default via 192.168.8.1 dev eth1
    

    重启网络服务或重启系统:

    sudo systemctl restart networking
    
  • CentOS / RHEL:编辑 /etc/sysconfig/network-scripts/route-<interface>​​ 文件:

    192.168.0.0/16 via 192.168.175.65 dev eth0
    default via <外网网关> dev eth1
    
  • 树莓派

    1. 打开终端或通过 SSH 连接到树莓派。

    2. 编辑 dhcpcd 配置文件:

      sudo nano /etc/dhcpcd.conf
      
    3. 在文件末尾添加以下内容,替换 <interface>​​、<static_ip>​​、<subnet_mask>​​ 和 <gateway>​​ 为你的网络配置:

      interface <interface>
      static ip_address=<static_ip>
      static routers=<gateway>
      static domain_name_servers=<DNS_server>
      

      例如:

      # 内网
      interface eth0    # 如果是有线连接,请使用'eth0';如果是无线连接,请使用'wlan0'
      static ip_address=192.168.28.209/26    # 设置固定的IP地址和子网掩码
      static routers=192.168.175.65          # 设置默认网关的IP地址
      static domain_name_servers=202.107.117.11   # 设置DNS服务器的IP地址
      static route 192.168.0.0/16 via 192.168.175.65 dev eth0
      static route 10.0.0.0/8 via 192.168.175.65 dev eth0
      #外网
      interface eth1  
      static ip_address=192.168.8.109/24    # 设置固定的IP地址和子网掩码
      static routers=192.168.8.1          # 设置默认网关的IP地址
      static domain_name_servers=202.107.117.11   # 设置DNS服务器的IP地址
      static route 0.0.0.0/0 via 192.168.8.1 dev eth1
      
      • <interface>​​:网卡接口名,通常是 eth0​​。
      • <static_ip>​​:你想要设置的静态 IP 地址。
      • <subnet_mask>​​:子网掩码,通常是 24​​。
      • <gateway>​​:网关地址。
      • <DNS_server>​​:DNS 服务器地址,可以是多个,用空格分隔。
    4. 保存并退出。

    5. 重启树莓派以使更改生效:

      sudo service dhcpcd restart
      或
      sudo reboot
      

      在树莓派重新启动后,它应该使用你设置的静态 IP 地址。你可以使用以下命令检查 IP 地址:

    确保在相应的接口(例如 eth0​)上看到你设置的静态 IP 地址。

    ip addr show
    

确保替换 <外网网关>​ 为你实际使用的外网网关地址。

在完成这些配置后,使用 ip route show​ 命令验证路由规则是否正确添加。如果需要,你可能需要重新启动网络服务或重启系统以使配置生效。

设置静态ip

在 Linux 中,你可以通过编辑网络配置文件来设置静态 IP 地址。配置文件的路径可能会因 Linux 发行版而异。以下是在一些常见发行版上设置静态 IP 的步骤:

Ubuntu / Debian

  1. 打开 /etc/network/interfaces​ 文件以编辑:

    sudo nano /etc/network/interfaces
    
  2. 在文件中找到关于你网卡的配置行,可能看起来类似于:

    auto eth0
    iface eth0 inet dhcp
    
  3. 将其修改为静态 IP 的配置,例如:

    auto eth0
    iface eth0 inet static
      address 192.168.28.209
      netmask 255.255.255.192
      gateway 192.168.175.65
      dns-nameservers 202.107.117.11
    

    这里,address​ 是你的静态 IP 地址,netmask​ 是子网掩码,gateway​ 是网关地址,dns-nameservers​ 是 DNS 服务器的地址。

  4. 保存并退出。

  5. 重启网络服务或重启系统:

    sudo systemctl restart networking
    

CentOS / RHEL

  1. 打开 /etc/sysconfig/network-scripts/ifcfg-<interface>​ 文件以编辑:

    sudo nano /etc/sysconfig/network-scripts/ifcfg-eth0
    

    替换 <interface>​ 为你的网络接口名称。

  2. 将文件修改为静态 IP 的配置,例如:

    这里,IPADDR​ 是你的静态 IP 地址,NETMASK​ 是子网掩码,GATEWAY​ 是网关地址,DNS1​ 和 DNS2​ 是 DNS 服务器的地址。

    TYPE=Ethernet
    BOOTPROTO=static
    NAME=eth0
    DEVICE=eth0
    ONBOOT=yes
    IPADDR=192.168.1.2
    NETMASK=255.255.255.0
    GATEWAY=192.168.1.1
    DNS1=8.8.8.8
    DNS2=8.8.4.4
    
  3. 保存并退出。

  4. 重启网络服务或重启系统:

    sudo systemctl restart network
    

请确保替换上述示例中的 IP 地址、子网掩码、网关和 DNS 服务器地址为你网络的实际值。