Initial commit
This commit is contained in:
472
commands/generate-interfaces-config.md
Normal file
472
commands/generate-interfaces-config.md
Normal file
@@ -0,0 +1,472 @@
|
||||
---
|
||||
description: Generate /etc/network/interfaces configuration files
|
||||
argument-hint: Optional interface requirements
|
||||
---
|
||||
|
||||
You are initiating /etc/network/interfaces configuration generation using a structured workflow to create production-ready Debian/Ubuntu networking configuration files.
|
||||
|
||||
## Workflow Steps
|
||||
|
||||
### 1. Gather Requirements
|
||||
|
||||
If the user provides specific requirements in their message, use those directly. Otherwise, ask the user for:
|
||||
|
||||
**Basic Requirements:**
|
||||
- Target system (Debian version, Ubuntu version)
|
||||
- Interfaces to configure (eth0, enp0s3, etc.)
|
||||
- IP addressing method (static, DHCP, or both)
|
||||
- DNS nameservers
|
||||
- Search domains
|
||||
|
||||
**For Static IP Configuration:**
|
||||
- IP address and netmask (e.g., 192.168.1.100/24)
|
||||
- Gateway IP address
|
||||
- Additional IP addresses (if needed)
|
||||
|
||||
**For VLAN Configuration:**
|
||||
- VLAN IDs and parent interfaces
|
||||
- IP addressing for each VLAN
|
||||
- VLAN naming convention
|
||||
|
||||
**For Bridge Configuration:**
|
||||
- Bridge interfaces to create
|
||||
- Physical interfaces to attach to bridges
|
||||
- STP settings (on/off)
|
||||
- IP addressing for bridges
|
||||
- Use case (virtualization, container networking)
|
||||
|
||||
**For Bond Configuration:**
|
||||
- Bond interfaces to create
|
||||
- Physical interfaces to bond
|
||||
- Bond mode (active-backup, 802.3ad, balance-rr, etc.)
|
||||
- MII monitoring interval
|
||||
- Primary interface (for active-backup)
|
||||
|
||||
**Advanced Options:**
|
||||
- MTU settings (jumbo frames)
|
||||
- Static routes
|
||||
- Policy routing
|
||||
- IPv6 configuration
|
||||
- Pre/post up/down scripts
|
||||
|
||||
### 2. Launch interfaces-config-generator Agent
|
||||
|
||||
Use the Task tool to launch the interfaces-config-generator agent with a detailed prompt containing:
|
||||
|
||||
```
|
||||
Generate /etc/network/interfaces configuration for the following requirements:
|
||||
|
||||
[Insert gathered requirements here with all details]
|
||||
|
||||
Please provide:
|
||||
1. Complete /etc/network/interfaces file content
|
||||
2. List of required packages to install
|
||||
3. Step-by-step deployment procedure
|
||||
4. Validation commands
|
||||
5. Rollback procedure
|
||||
6. Comments explaining each section
|
||||
```
|
||||
|
||||
### 3. Review Generated Configuration
|
||||
|
||||
When the agent returns the configuration, review it for:
|
||||
- Correct syntax and indentation
|
||||
- Loopback interface inclusion
|
||||
- Proper use of auto/allow-hotplug directives
|
||||
- No conflicting gateway definitions
|
||||
- Correct netmask/CIDR notation
|
||||
- Required package dependencies documented
|
||||
|
||||
### 4. Identify Required Packages
|
||||
|
||||
Ensure the configuration includes a list of required packages:
|
||||
|
||||
**Common Package Requirements:**
|
||||
```bash
|
||||
# Base networking (usually pre-installed)
|
||||
apt-get install ifupdown
|
||||
|
||||
# For VLAN support
|
||||
apt-get install vlan
|
||||
|
||||
# For bridge support
|
||||
apt-get install bridge-utils
|
||||
|
||||
# For bonding support
|
||||
apt-get install ifenslave
|
||||
|
||||
# For advanced routing
|
||||
apt-get install iproute2
|
||||
```
|
||||
|
||||
### 5. Present Deployment Procedure
|
||||
|
||||
Ensure the generated configuration includes a safe deployment procedure:
|
||||
|
||||
1. **Install Required Packages**
|
||||
```bash
|
||||
# Update package lists
|
||||
sudo apt-get update
|
||||
|
||||
# Install required packages
|
||||
sudo apt-get install -y vlan bridge-utils ifenslave
|
||||
|
||||
# Load kernel modules
|
||||
sudo modprobe 8021q # VLAN support
|
||||
sudo modprobe bonding # Bonding support
|
||||
|
||||
# Make modules load at boot
|
||||
echo "8021q" | sudo tee -a /etc/modules
|
||||
echo "bonding" | sudo tee -a /etc/modules
|
||||
```
|
||||
|
||||
2. **Backup Current Configuration**
|
||||
```bash
|
||||
# Backup interfaces file
|
||||
sudo cp /etc/network/interfaces /etc/network/interfaces.backup.$(date +%Y%m%d_%H%M%S)
|
||||
|
||||
# Backup current network state
|
||||
ip addr show > ~/network-backup-$(date +%Y%m%d_%H%M%S).txt
|
||||
ip route show >> ~/network-backup-$(date +%Y%m%d_%H%M%S).txt
|
||||
```
|
||||
|
||||
3. **Test Configuration Syntax**
|
||||
```bash
|
||||
# Test interface bring-up without actually applying
|
||||
sudo ifup --no-act eth0
|
||||
sudo ifup --no-act <interface-name>
|
||||
|
||||
# Check for syntax errors in the file
|
||||
sudo cat /etc/network/interfaces | grep -E "^(auto|allow-hotplug|iface)"
|
||||
```
|
||||
|
||||
4. **Deploy New Configuration**
|
||||
```bash
|
||||
# Copy new configuration
|
||||
sudo cp new-interfaces /etc/network/interfaces
|
||||
|
||||
# Set correct permissions
|
||||
sudo chmod 644 /etc/network/interfaces
|
||||
sudo chown root:root /etc/network/interfaces
|
||||
```
|
||||
|
||||
5. **Apply Configuration**
|
||||
```bash
|
||||
# Method 1: Restart networking service (may cause temporary disconnection)
|
||||
sudo systemctl restart networking
|
||||
|
||||
# Method 2: Bring down and up specific interfaces
|
||||
sudo ifdown eth0 && sudo ifup eth0
|
||||
|
||||
# Method 3: Reboot (safest for complex changes)
|
||||
sudo reboot
|
||||
```
|
||||
|
||||
6. **Verify Configuration**
|
||||
```bash
|
||||
# Check interface status
|
||||
ip addr show
|
||||
|
||||
# Check routing table
|
||||
ip route show
|
||||
|
||||
# Test connectivity
|
||||
ping -c 4 <gateway-ip>
|
||||
ping -c 4 8.8.8.8
|
||||
|
||||
# Check DNS resolution
|
||||
nslookup google.com
|
||||
```
|
||||
|
||||
### 6. Provide Validation Commands
|
||||
|
||||
Include comprehensive validation commands:
|
||||
|
||||
**Interface Status:**
|
||||
```bash
|
||||
# Show all interfaces
|
||||
ip addr show
|
||||
|
||||
# Show specific interface
|
||||
ip addr show eth0
|
||||
|
||||
# Show interface statistics
|
||||
ip -s link show eth0
|
||||
|
||||
# Check interface up/down state
|
||||
ip link show | grep "state UP"
|
||||
```
|
||||
|
||||
**Routing Validation:**
|
||||
```bash
|
||||
# Show main routing table
|
||||
ip route show
|
||||
|
||||
# Show all routing tables
|
||||
ip route show table all
|
||||
|
||||
# Show specific route
|
||||
ip route get 8.8.8.8
|
||||
```
|
||||
|
||||
**VLAN Validation:**
|
||||
```bash
|
||||
# Check VLAN interfaces
|
||||
cat /proc/net/vlan/config
|
||||
|
||||
# Show VLAN interface details
|
||||
ip -d link show eth0.100
|
||||
```
|
||||
|
||||
**Bridge Validation:**
|
||||
```bash
|
||||
# Show bridge interfaces
|
||||
brctl show
|
||||
|
||||
# Show bridge details
|
||||
bridge link show
|
||||
|
||||
# Check STP status
|
||||
brctl showstp br0
|
||||
```
|
||||
|
||||
**Bond Validation:**
|
||||
```bash
|
||||
# Check bonding status
|
||||
cat /proc/net/bonding/bond0
|
||||
|
||||
# Show bond interface details
|
||||
ip -d link show bond0
|
||||
```
|
||||
|
||||
### 7. Include Troubleshooting Commands
|
||||
|
||||
Provide troubleshooting commands for common issues:
|
||||
|
||||
**Interface Not Coming Up:**
|
||||
```bash
|
||||
# Check interface configuration
|
||||
sudo ifquery eth0
|
||||
|
||||
# Try manual bring-up with verbose output
|
||||
sudo ifup -v eth0
|
||||
|
||||
# Check system logs
|
||||
sudo journalctl -u networking -n 50
|
||||
|
||||
# Check interface configuration file syntax
|
||||
sudo ifquery --list
|
||||
```
|
||||
|
||||
**No Network Connectivity:**
|
||||
```bash
|
||||
# Check interface status
|
||||
ip link show
|
||||
|
||||
# Check IP addressing
|
||||
ip addr show
|
||||
|
||||
# Check default route
|
||||
ip route show default
|
||||
|
||||
# Check physical link
|
||||
ethtool eth0
|
||||
|
||||
# Test ARP
|
||||
ip neigh show
|
||||
```
|
||||
|
||||
**VLAN Issues:**
|
||||
```bash
|
||||
# Verify VLAN module loaded
|
||||
lsmod | grep 8021q
|
||||
|
||||
# Check VLAN interface
|
||||
cat /proc/net/vlan/eth0.100
|
||||
|
||||
# Manually create VLAN to test
|
||||
sudo ip link add link eth0 name eth0.100 type vlan id 100
|
||||
```
|
||||
|
||||
**Bridge Issues:**
|
||||
```bash
|
||||
# Check bridge configuration
|
||||
brctl show
|
||||
|
||||
# View bridge MAC learning table
|
||||
brctl showmacs br0
|
||||
|
||||
# Check STP state
|
||||
brctl showstp br0
|
||||
```
|
||||
|
||||
**Bond Issues:**
|
||||
```bash
|
||||
# Check bonding module
|
||||
lsmod | grep bonding
|
||||
|
||||
# View bond status
|
||||
cat /proc/net/bonding/bond0
|
||||
|
||||
# Check bond mode and slaves
|
||||
ip -d link show bond0
|
||||
```
|
||||
|
||||
### 8. Document Rollback Procedure
|
||||
|
||||
Ensure rollback procedure is clearly documented:
|
||||
|
||||
```bash
|
||||
# Method 1: Restore backup configuration
|
||||
sudo cp /etc/network/interfaces.backup.YYYYMMDD_HHMMSS /etc/network/interfaces
|
||||
sudo systemctl restart networking
|
||||
|
||||
# Method 2: Manual interface configuration (temporary)
|
||||
sudo ip addr add 192.168.1.100/24 dev eth0
|
||||
sudo ip route add default via 192.168.1.1
|
||||
sudo ip link set eth0 up
|
||||
|
||||
# Method 3: Boot into recovery mode
|
||||
# Reboot and select recovery mode from GRUB menu
|
||||
# Edit /etc/network/interfaces manually
|
||||
# Resume normal boot
|
||||
|
||||
# Verify rollback
|
||||
ip addr show
|
||||
ip route show
|
||||
ping -c 4 <gateway-ip>
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
When generating /etc/network/interfaces configurations:
|
||||
|
||||
1. **Always Include Loopback**
|
||||
```
|
||||
auto lo
|
||||
iface lo inet loopback
|
||||
```
|
||||
|
||||
2. **Use auto vs allow-hotplug Appropriately**
|
||||
- `auto`: For interfaces that should always come up at boot
|
||||
- `allow-hotplug`: For removable devices (USB, wireless)
|
||||
|
||||
3. **Consistent Indentation**
|
||||
- Use spaces or tabs consistently
|
||||
- Indent option lines under iface declarations
|
||||
|
||||
4. **Gateway Configuration**
|
||||
- Only one default gateway per address family
|
||||
- Specify gateway on the primary internet-facing interface
|
||||
|
||||
5. **Documentation**
|
||||
- Add comments explaining complex configurations
|
||||
- Document interface purposes
|
||||
- Note any external dependencies
|
||||
|
||||
6. **Testing**
|
||||
- Always use `ifup --no-act` before applying
|
||||
- Test in non-production first
|
||||
- Have console access before making changes
|
||||
- Keep backup configurations
|
||||
|
||||
7. **Modular Configuration**
|
||||
- Use `/etc/network/interfaces.d/` for complex setups
|
||||
- Separate VLANs, bridges, bonds into different files
|
||||
|
||||
## Common Scenarios
|
||||
|
||||
### Simple Static IP Server
|
||||
```
|
||||
auto lo
|
||||
iface lo inet loopback
|
||||
|
||||
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
|
||||
```
|
||||
|
||||
### DHCP with Static Route
|
||||
```
|
||||
auto eth0
|
||||
iface eth0 inet dhcp
|
||||
up ip route add 10.0.0.0/8 via 192.168.1.254
|
||||
down ip route del 10.0.0.0/8 via 192.168.1.254
|
||||
```
|
||||
|
||||
### VLAN Configuration
|
||||
```
|
||||
auto eth0
|
||||
iface eth0 inet manual
|
||||
|
||||
auto eth0.100
|
||||
iface eth0.100 inet static
|
||||
address 10.0.100.1
|
||||
netmask 255.255.255.0
|
||||
vlan-raw-device eth0
|
||||
```
|
||||
|
||||
### Bridge for Virtualization
|
||||
```
|
||||
auto br0
|
||||
iface br0 inet static
|
||||
address 192.168.1.10
|
||||
netmask 255.255.255.0
|
||||
gateway 192.168.1.1
|
||||
bridge_ports eth0 eth1
|
||||
bridge_stp off
|
||||
bridge_fd 0
|
||||
```
|
||||
|
||||
### Active-Backup Bond
|
||||
```
|
||||
auto bond0
|
||||
iface bond0 inet static
|
||||
address 192.168.1.10
|
||||
netmask 255.255.255.0
|
||||
bond-slaves eth0 eth1
|
||||
bond-mode active-backup
|
||||
bond-miimon 100
|
||||
bond-primary eth0
|
||||
```
|
||||
|
||||
## Migration Notes
|
||||
|
||||
**For Systems Using Netplan:**
|
||||
- Ubuntu 17.10+ uses netplan by default
|
||||
- /etc/network/interfaces is deprecated on these systems
|
||||
- Consider using generate-netplan-config instead
|
||||
- If using interfaces file on netplan systems, disable netplan renderer
|
||||
|
||||
**Checking Current Network Manager:**
|
||||
```bash
|
||||
# Check if netplan is active
|
||||
ls -la /etc/netplan/
|
||||
|
||||
# Check if using systemd-networkd
|
||||
systemctl status systemd-networkd
|
||||
|
||||
# Check if using NetworkManager
|
||||
systemctl status NetworkManager
|
||||
|
||||
# Check if using ifupdown
|
||||
systemctl status networking
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- /etc/network/interfaces is the traditional Debian/Ubuntu networking configuration
|
||||
- Widely supported across Debian 6-11 and Ubuntu versions pre-17.10
|
||||
- Still commonly used for servers and systems requiring fine-grained control
|
||||
- Requires ifupdown package
|
||||
- Configuration changes require interface restart or system reboot
|
||||
- Not all features available with all network managers
|
||||
|
||||
## Example Task Invocation
|
||||
|
||||
```
|
||||
generate-interfaces-config I need static IP 192.168.1.50/24 on eth0 with gateway 192.168.1.1, two VLANs (VLAN 100 and 200), and a bridge br0 for KVM
|
||||
```
|
||||
Reference in New Issue
Block a user