This simple how-to enables a secondary network card on an Ubuntu instance running Amazon AWS EC2.
It assumes a setup where the primary network card is in a private subnet, and the secondary network card is in a public subnet.
To use this, follow these steps:
- Create a script file
setupSecondNIC.shwith the below content - chmod +x setupSecondNIC.sh
- Run the script
- qcp /tmp/51-<NIC>.yaml /etc/netplan (replace NIC with the name of the network card)
- run
netplan applyto apply the configuration
You should now have an enabled secondary network card.
#!/bin/bash
#
# One line to give the program's name and a brief description.
# Copyright (C) 2013 Jostein Elvaker Haande - aka tolecnal
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, see <http://www.gnu.org/licenses/>.
#
#
# @Filename: test.sh
# @Author: Jostein Elvaker Haande - aka tolecnal
# @Email: tolecnal@tolecnal.net
# @Website: http://tolecnal.net
# @License: GPL2
# @Created: Fri 23 Oct 2020 15:10:21 UTC
# @Last Change: Tue 03 Nov 2020 16:29:54 UTC
# @Revision: 7
#
# get MAC (need to retry this command until it gets a non-zero MAC)
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
CFS_ENI_INTERFACE="ens6"
CFS_ENI_HWADDR="$(cat /sys/class/net/$CFS_ENI_INTERFACE/address 2>/dev/null)"
CFS_NODE_IP="$(curl -H "X-aws-ec2-metadata-token: $TOKEN" -s -f http://169.254.169.254/latest/meta-data/network/interfaces/macs/$CFS_ENI_HWADDR/local-ipv4s)"
# query instance metadata for network
CFS_ENI_CIDR="$(curl -H "X-aws-ec2-metadata-token: $TOKEN" -s -f http://169.254.169.254/latest/meta-data/network/interfaces/macs/$CFS_ENI_HWADDR/subnet-ipv4-cidr-block)"
CFS_ENI_CIDR_NETWORK="$(echo $CFS_ENI_CIDR | cut -d/ -f1)"
CFS_ENI_CIDR_PREFIX="$(echo $CFS_ENI_CIDR | cut -d/ -f2)"
CFS_ENI_ROUTER="$(( $(echo $CFS_ENI_CIDR_NETWORK | cut -d. -f4) + 1))"
CFS_ENI_GATEWAY="$(echo $CFS_ENI_CIDR_NETWORK | cut -d. -f1-3).$CFS_ENI_ROUTER"
# write out netplan yaml file
cat << EOF > /tmp/51-$CFS_ENI_INTERFACE.yaml
network:
version: 2
renderer: networkd
ethernets:
$CFS_ENI_INTERFACE:
addresses:
- $CFS_NODE_IP/$CFS_ENI_CIDR_PREFIX
dhcp4: no
routes:
- to: 0.0.0.0/0
via: $CFS_ENI_GATEWAY
table: 1000
- to: $CFS_ENI_CIDR
via: 0.0.0.0
scope: link
table: 1000
routing-policy:
- from: $CFS_NODE_IP
table: 1000
EOF
