{"id":1024,"date":"2016-11-02T00:21:59","date_gmt":"2016-11-02T05:21:59","guid":{"rendered":"https:\/\/www.softwareab.net\/wordpress\/?p=1024"},"modified":"2016-11-02T18:37:13","modified_gmt":"2016-11-02T23:37:13","slug":"docker-linux-networking-custom-interfaces","status":"publish","type":"post","link":"https:\/\/www.softwareab.net\/wordpress\/docker-linux-networking-custom-interfaces\/","title":{"rendered":"Docker and Linux Networking: Custom Interfaces!"},"content":{"rendered":"<p>Hi All. Today my goal was to build on a previous post I wrote <a href=\"\/wordpress\/ccna-default-routing-rip-v2-vmware-workstation-nics\/\">on Default Routing, RIP v2, and VMware Workstation NICs<\/a>. The problem? I am running on <a href=\"https:\/\/aws.amazon.com\/ec2\/\">AWS EC2<\/a> so nested virtualization options are lacking (<a href=\"https:\/\/www.ravellosystems.com\/blog\/run-nested-kvm-on-aws-google\/\">Ravello Systems has a solution<\/a>, but I didn&#8217;t want yet-another-layer in between my CloudFormation templates and my EC2 VMs). Therefore, <a href=\"http:\/\/www.docker.com\">Docker<\/a> to the rescue &#8211; I can run all the containers on straight EC2 VMs all I want.<\/p>\n<p>However &#8211; my current use case is to build a &#8220;sysadmin testing lab&#8221; on EC2 that includes some Cisco router emulators (see <a href=\"http:\/\/sourceforge.net\/projects\/dyna-gen\/files\/\">Dynagen \/ Dynamips). To do this, I want to hook some of my Docker containers in with my router emulators so I can support the following network architecture:<br \/>\n<a href=\"http:\/\/i6.photobucket.com\/albums\/y240\/Mythsyin\/labq.jpg\"><img decoding=\"async\" src=\"http:\/\/i6.photobucket.com\/albums\/y240\/Mythsyin\/labq.jpg\" \/><\/a><\/p>\n<p>The drawing is from Chapter 8 of <a href=\"http:\/\/www.lammle.com\/the-latest-books-by-todd-lammle\/\">Todd Lammle CCNA Study Guide<\/a> and I figured would be an awesome way to weed out network admin wannabe&#8217;s. I&#8217;ll just have a router or two fired up, and see if the would-be network admin can answer things like &#8220;What does <code>show ip int br<\/code> do?&#8221;<\/p>\n<p>Or &#8211; better yet &#8211; maybe answer how I built such an environment <strong>without<\/strong> the use of VirtualBox, VMware Workstation, KVM, or other virtualization tools. In other words, how I can connect my underlying Docker containers on my EC2 instance to the Dynamips emulated routers.<\/p>\n<h2>Plumbing&#8230;<\/h2>\n<p>This article is based on a CentOS 7 minimal EC2 instance with &#8220;just-enough&#8221; software added to permit me to run Puppet, Docker, and Dynamips\/Dynagen. I&#8217;m not going to cover my CloudFormation script (although that would make a great article in and of itself &#8211; constructs the networks, IAM policies, auto-scaling groups, launch configurations, and everything and then fires off Puppet to apply policy).<\/p>\n<p>Instead, we&#8217;re going to cover the meat of the article: attaching a customized network interface to a Docker container.<\/p>\n<p><strong>The underlying principle: <code>veth<\/code> pairs<\/strong>. Before going further, I suggest you read up on <code>veth pairs<\/code>. A good reference is <a href=\"http:\/\/linux-blog.anracom.com\/2016\/02\/02\/fun-with-veth-devices-linux-virtual-bridges-kvm-vmware-attach-the-host-and-connect-bridges-via-veth\/\">Fun with veth devices, Linux virtual bridges, KVM, VMware \u2013 attach the host and connect bridges via veth<\/a>.<\/p>\n<h2>The Networks &#8211; and the &#8220;Host&#8221; Network!<\/h2>\n<p>First &#8211; remember that we are emulating a set of networks, so here are the network mappings:<\/p>\n<ul>\n<li>VMnet2 \u2013 &#8220;Core&#8221; network, 10.1.1.0\/24.<\/li>\n<li>VMnet3 \u2013 &#8220;Finance&#8221; network, 192.168.10.0\/24.<\/li>\n<li>VMnet4 \u2013 &#8220;Marketing&#8221; network, 192.168.20.0\/24.<\/li>\n<li>VMnet5 \u2013 &#8220;Sales&#8221; network, 192.168.30.0\/24.<\/li>\n<li>VMnet6 \u2013 &#8220;HR&#8221; network, 192.168.40.0\/24.<\/li>\n<li>VMnet7 \u2013 &#8220;Mobile User&#8221; network, 172.16.10.0\/24.<\/li>\n<li>VMnet8 \u2013 &#8220;Host&#8221; network, 192.168.81.0\/24<\/li>\n<\/ul>\n<p>Before going further, take a careful look at <code>VMnet8<\/code>. This corresponds to VMware&#8217;s out-of-the-box bridge created in the <a href=\"\/wordpress\/ccna-default-routing-rip-v2-vmware-workstation-nics\/\">Windows-based article<\/a> I wrote some years ago. Also, it just happens to correspond to the default Docker interface, as in:<\/p>\n<pre><code>[centos@ip-172-20-241-11 ~]$ ip addr show dev docker0\r\n3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP \r\n    link\/ether 02:42:a2:35:4c:c1 brd ff:ff:ff:ff:ff:ff\r\n    inet 172.17.0.1\/16 scope global docker0\r\n       valid_lft forever preferred_lft forever\r\n    inet6 fe80::42:a2ff:fe35:4cc1\/64 scope link \r\n       valid_lft forever preferred_lft forever<\/code><\/pre>\n<p>In other words, we <em>could<\/em> simply have used <code>docker0<\/code> as a perfectly valid bridge (with NAT capabilities). But for my purposes, I want to subvert the Docker networking process completely. (As a side note: Kubernetes is a primary area of research for me, so the more I understand about Docker networking internals and container networking as a discipline, the better.)<\/p>\n<p>So let&#8217;s first create the bridges to correspond to our networks:<\/p>\n<pre><code>for i in $(seq 2 8) ; do sudo ip link add VMnet$i type bridge ; done\r\nfor i in $(seq 2 8) ; do sudo ip link set VMnet$i up ; done<\/code><\/pre>\n<p>Now we can see all of the bridges:<\/p>\n<pre><code>15: VMnet2: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT \r\n    link\/ether 3e:bb:0d:b2:18:f0 brd ff:ff:ff:ff:ff:ff\r\n16: VMnet3: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc noqueue state UP mode DEFAULT \r\n    link\/ether ce:a9:e9:b3:64:71 brd ff:ff:ff:ff:ff:ff\r\n17: VMnet4: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT \r\n    link\/ether da:8d:f3:32:f8:71 brd ff:ff:ff:ff:ff:ff\r\n18: VMnet5: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT \r\n    link\/ether 8a:e5:b5:c4:dc:84 brd ff:ff:ff:ff:ff:ff\r\n19: VMnet6: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT \r\n    link\/ether c2:62:53:e2:da:6e brd ff:ff:ff:ff:ff:ff\r\n20: VMnet7: &lt;NO-CARRIER,BROADCAST,MULTICAST,UP&gt; mtu 1500 qdisc noqueue state DOWN mode DEFAULT \r\n    link\/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff\r\n21: VMnet8: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc noqueue state UP mode DEFAULT \r\n    link\/ether c2:f3:2e:9c:87:d8 brd ff:ff:ff:ff:ff:ff<\/code><\/pre>\n<p>Some of the bridges are <code>state UP<\/code> and some are not; that is because we have interfaces associated with some of the bridges.<\/p>\n<h2>Dynamips \/ Dynagen Routers<\/h2>\n<p>This is still TBD: suffice it to say that we have four emulated routers to handle our networks, and that we have on a VLAN&#8217;ed interface on the CORP router IP address <code>10.1.1.2<\/code>. This IP address can only be accessed if routing (and all the network plumbing) is setup correctly.<\/p>\n<p>I *promise* I will get another article pushed out on how I setup the four routers &#8211; that itself is worth some words. For now, here is what the CORP router has for <code>10.1.1.2<\/code>:<\/p>\n<pre><code>CORP#<strong>show int vlan2<\/strong>\r\n<em>Vlan2 is up, line protocol is up \r\n  Hardware is EtherSVI, address is cc00.793b.0000 (bia cc00.793b.0000)\r\n  Description: Switch Card to Core Network\r\n  Internet address is 10.1.1.2\/24\r\n  MTU 1500 bytes, BW 100000 Kbit\/sec, DLY 100 usec, \r\n     reliability 255\/255, txload 1\/255, rxload 1\/255\r\n  Encapsulation ARPA, loopback not set\r\n  ARP type: ARPA, ARP Timeout 04:00:00\r\n  Last input 00:20:35, output never, output hang never\r\n  Last clearing of \"show interface\" counters never\r\n  Input queue: 0\/75\/0\/0 (size\/max\/drops\/flushes); Total output drops: 2\r\n  Queueing strategy: fifo\r\n  Output queue: 0\/40 (size\/max)\r\n  5 minute input rate 0 bits\/sec, 0 packets\/sec\r\n  5 minute output rate 0 bits\/sec, 0 packets\/sec\r\n     0 packets input, 0 bytes, 0 no buffer\r\n     Received 0 broadcasts, 0 runts, 0 giants, 0 throttles\r\n     0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored\r\n     48 packets output, 11956 bytes, 0 underruns\r\n     0 output errors, 1 interface resets\r\n     0 unknown protocol drops\r\n     0 output buffer failures, 0 output buffers swapped out<\/em><\/code><\/pre>\n<h2>Routing and a Host Address<\/h2>\n<p>You will notice that we have a total of seven (7) networks we are working with. In order for us to perform testing, we need the host (really, the AWS EC2 running CentOS instance) to be able to get to each of our managed networks. For this to happen, we need a gateway to the routers we are going to provision. Let&#8217;s create an address on our host that can be used to perform NAT:<\/p>\n<pre><code># create the \"Host\" interface, which we will use for NAT.\r\nsudo ip link add dev VMnet8-host-dev type veth peer name VMnet8-host-br\r\nsudo ip addr add 192.168.81.1\/24 dev VMnet8-host-dev\r\nsudo ip link set dev VMnet8-host-br master VMnet8\r\nsudo ip link set VMnet8-host-br up\r\nsudo ip link set VMnet8-host-dev up<\/code><\/pre>\n<p>Now we can setup routes for the internal networks we are creating:<\/p>\n<pre><code># setup host routing - note the use of supernets\r\nsudo ip route add 10.1.0.0\/21 via 192.168.81.10\r\nsudo ip route add 172.16.10.0\/24 via 192.168.81.10\r\nsudo ip route add 192.168.0.0\/18 via 192.168.81.10<\/code><\/pre>\n<p>Now we can take a quick look at our work. We have a number of bridges created, and we have routing defined for our virtual networks:<\/p>\n<pre><code>[centos@ip-172-20-241-11 ~]$ <strong>sudo ip addr show VMnet8-host-dev<\/strong>\r\n<em>37: VMnet8-host-dev@VMnet8-host-br: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast state UP qlen 1000\r\n    link\/ether 9e:92:53:d0:c3:45 brd ff:ff:ff:ff:ff:ff\r\n    inet 192.168.81.1\/24 scope global VMnet8-host-dev\r\n       valid_lft forever preferred_lft forever\r\n    inet6 fe80::9c92:53ff:fed0:c345\/64 scope link \r\n       valid_lft forever preferred_lft forever<\/em>\r\n\r\n[centos@ip-172-20-241-11 ~]$ <strong>sudo ip addr show VMnet8-host-br<\/strong>\r\n<em>36: VMnet8-host-br@VMnet8-host-dev: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast master VMnet8 state UP qlen 1000\r\n    link\/ether c2:f3:2e:9c:87:d8 brd ff:ff:ff:ff:ff:ff\r\n    inet6 fe80::c0f3:2eff:fe9c:87d8\/64 scope link \r\n       valid_lft forever preferred_lft forever<\/em>\r\n\r\n[centos@ip-172-20-241-11 ~]$ <strong>sudo ip route<\/strong>\r\n<em>default via 172.20.241.1 dev eth0 \r\n10.1.0.0\/21 via 192.168.81.10 dev VMnet8-host-dev \r\n172.16.10.0\/24 via 192.168.81.10 dev VMnet8-host-dev \r\n172.17.0.0\/16 dev docker0  proto kernel  scope link  src 172.17.0.1 \r\n172.20.241.0\/27 dev eth0  proto kernel  scope link  src 172.20.241.11 \r\n192.168.0.0\/18 via 192.168.81.10 dev VMnet8-host-dev\r\n192.168.81.0\/24 dev VMnet8-host-dev  proto kernel  scope link  src 192.168.81.1<\/em>\r\n\r\n[centos@ip-172-20-241-11 ~]$ <strong>sudo ping -c 1 10.1.1.2<\/strong>\r\n<em>PING 10.1.1.2 (10.1.1.2) 56(84) bytes of data.\r\n64 bytes from 10.1.1.2: icmp_seq=1 ttl=254 time=29.8 ms\r\n\r\n--- 10.1.1.2 ping statistics ---\r\n1 packets transmitted, 1 received, 0% packet loss, time 0ms\r\nrtt min\/avg\/max\/mdev = 29.886\/29.886\/29.886\/0.000 ms<\/em><\/code><\/pre>\n<h2>The Docker Container<\/h2>\n<p>This article is about how to attach virtual interfaces dynamically to a running Docker container; thus, we need to create a Docker container. Let&#8217;s first fire up a simple Web server (uses <code>thtpd<\/code> to serve up &#8220;Hello, World&#8221;, thanks very much to <a href=\"http:\/\/blog.oddbit.com\/2014\/08\/11\/four-ways-to-connect-a-docker\/\">Lars Kellogg-Stedman<\/a> for the container and for giving me inspiration for this research):<\/p>\n<pre><code># create the docker container\r\ndocker run -d --name web larsks\/simpleweb<\/code><\/pre>\n<p>Take a look at the interface that Docker created for this container:<\/p>\n<pre><code>49: vethe240a36@if48: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP \r\n    link\/ether c2:64:e0:c5:39:d2 brd ff:ff:ff:ff:ff:ff link-netnsid 0\r\n    inet6 fe80::c064:e0ff:fec5:39d2\/64 scope link \r\n       valid_lft forever preferred_lft forever<\/code><\/pre>\n<p>The interface leverages Container Namespaces (see <a href=\"https:\/\/coderwall.com\/p\/xwbraq\/attach-to-your-docker-containers-with-ease-using-nsenter\">Attach to your Docker containers with ease using nsenter<\/a>). What we&#8217;ll do now is create a new <code>veth pair<\/code> and attach it to the container manually:<\/p>\n<pre><code># create a veth on VMnet3 for use by the container\r\nsudo ip link add web-dev type veth peer name web-br\r\nsudo ip link set dev web-br master VMnet3\r\nsudo ip link set web-br up\r\n\r\n# attach to the container via netns\r\nsudo ip link set netns $(docker-pid web) dev web-dev\r\nsudo nsenter -t $(docker-pid web) -n ip addr add 192.168.10.100\/24 dev web-dev\r\nsudo nsenter -t $(docker-pid web) -n ip link set web-dev up\r\n\r\n# setup default routing in the container to use our new interface\r\nsudo nsenter -t $(docker-pid web) -n ip route del default\r\nsudo nsenter -t $(docker-pid web) -n ip route add default via 192.168.10.10 dev web-dev<\/code><\/pre>\n<p>That code snippet does a lot of work. We create the <code>veth pair<\/code>, attach it to the container by using <code>nsenter<\/code>, and then change default routing to use that new interface.<\/p>\n<p>The end result? Our internal Docker container now has completely customized networking, and can communicate both with our new host interface as well as the virtual, VLAN-located IP address on the CORP router:<\/p>\n<pre><code>[centos@ip-172-20-241-11 ~]$ <strong>sudo nsenter -t $(docker-pid web) -n ping -c 2 10.1.1.2<\/strong>\r\n<em>PING 10.1.1.2 (10.1.1.2) 56(84) bytes of data.\r\n64 bytes from 10.1.1.2: icmp_seq=1 ttl=254 time=74.5 ms\r\n64 bytes from 10.1.1.2: icmp_seq=2 ttl=254 time=47.0 ms\r\n\r\n--- 10.1.1.2 ping statistics ---\r\n2 packets transmitted, 2 received, 0% packet loss, time 1001ms\r\nrtt min\/avg\/max\/mdev = 47.003\/60.789\/74.576\/13.788 ms<\/em>\r\n\r\n[centos@ip-172-20-241-11 ~]$ <strong>sudo nsenter -t $(docker-pid web) -n ping -c 2 192.168.81.1<\/strong>\r\n<em>PING 192.168.81.1 (192.168.81.1) 56(84) bytes of data.\r\n64 bytes from 192.168.81.1: icmp_seq=1 ttl=61 time=37.6 ms\r\n64 bytes from 192.168.81.1: icmp_seq=2 ttl=61 time=60.9 ms\r\n\r\n--- 192.168.81.1 ping statistics ---\r\n2 packets transmitted, 2 received, 0% packet loss, time 1002ms\r\nrtt min\/avg\/max\/mdev = 37.624\/49.310\/60.997\/11.688 ms<\/em><\/code><\/pre>\n<p>Finally, let&#8217;s prove we can get the output from the Web server:<\/p>\n<pre><code>[centos@ip-172-20-241-22 ~]$ <strong>sudo nsenter -t $(docker-pid web) -n curl http:\/\/192.168.10.100\/hello.html<\/strong>\r\n<em>Hello world<\/em><\/code><\/pre>\n<p>And with that, it&#8217;s almost 2am and time to end this article.<\/p>\n<p>Happy computing!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hi All. Today my goal was to build on a previous post I wrote on Default Routing, RIP v2, and VMware Workstation NICs. The problem? I am running on AWS EC2 so nested virtualization options are lacking (Ravello Systems has &hellip;<\/p>\n<p class=\"read-more\"> <a class=\"more-link\" href=\"https:\/\/www.softwareab.net\/wordpress\/docker-linux-networking-custom-interfaces\/\"> <span class=\"screen-reader-text\">Docker and Linux Networking: Custom Interfaces!<\/span> Read More &raquo;<\/a><\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[91,1],"tags":[53,42,87,37,54,19,71],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Docker and Linux Networking: Custom Interfaces! - softwareab<\/title>\n<meta name=\"description\" content=\"Connect underlying Docker containers on an EC2 instance dynamically to Linux bridged interfaces. Helps with running Dynamips emulated routers on AWS!\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.softwareab.net\/wordpress\/docker-linux-networking-custom-interfaces\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Docker and Linux Networking: Custom Interfaces! - softwareab\" \/>\n<meta property=\"og:description\" content=\"Connect underlying Docker containers on an EC2 instance dynamically to Linux bridged interfaces. Helps with running Dynamips emulated routers on AWS!\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.softwareab.net\/wordpress\/docker-linux-networking-custom-interfaces\/\" \/>\n<meta property=\"og:site_name\" content=\"softwareab\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/cloudraticsolutions\/\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/cloudraticsolutions\/\" \/>\n<meta property=\"article:published_time\" content=\"2016-11-02T05:21:59+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2016-11-02T23:37:13+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/i6.photobucket.com\/albums\/y240\/Mythsyin\/labq.jpg\" \/>\n<meta name=\"author\" content=\"Andrew Bruce\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@realcloudratics\" \/>\n<meta name=\"twitter:site\" content=\"@realcloudratics\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andrew Bruce\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/docker-linux-networking-custom-interfaces\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/docker-linux-networking-custom-interfaces\/\"},\"author\":{\"name\":\"Andrew Bruce\",\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/1337443eaeb75104e0410b508e67f600\"},\"headline\":\"Docker and Linux Networking: Custom Interfaces!\",\"datePublished\":\"2016-11-02T05:21:59+00:00\",\"dateModified\":\"2016-11-02T23:37:13+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/docker-linux-networking-custom-interfaces\/\"},\"wordCount\":910,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/1337443eaeb75104e0410b508e67f600\"},\"image\":{\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/docker-linux-networking-custom-interfaces\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/i6.photobucket.com\/albums\/y240\/Mythsyin\/labq.jpg\",\"keywords\":[\"amazon\",\"centos\",\"docker\",\"dynagen\/dynamips\",\"ec2\",\"network\",\"virtualization\"],\"articleSection\":[\"Docker\",\"Teknocratica\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.softwareab.net\/wordpress\/docker-linux-networking-custom-interfaces\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/docker-linux-networking-custom-interfaces\/\",\"url\":\"https:\/\/www.softwareab.net\/wordpress\/docker-linux-networking-custom-interfaces\/\",\"name\":\"Docker and Linux Networking: Custom Interfaces! - softwareab\",\"isPartOf\":{\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/docker-linux-networking-custom-interfaces\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/docker-linux-networking-custom-interfaces\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/i6.photobucket.com\/albums\/y240\/Mythsyin\/labq.jpg\",\"datePublished\":\"2016-11-02T05:21:59+00:00\",\"dateModified\":\"2016-11-02T23:37:13+00:00\",\"description\":\"Connect underlying Docker containers on an EC2 instance dynamically to Linux bridged interfaces. Helps with running Dynamips emulated routers on AWS!\",\"breadcrumb\":{\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/docker-linux-networking-custom-interfaces\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.softwareab.net\/wordpress\/docker-linux-networking-custom-interfaces\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/docker-linux-networking-custom-interfaces\/#primaryimage\",\"url\":\"http:\/\/i6.photobucket.com\/albums\/y240\/Mythsyin\/labq.jpg\",\"contentUrl\":\"http:\/\/i6.photobucket.com\/albums\/y240\/Mythsyin\/labq.jpg\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/docker-linux-networking-custom-interfaces\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.softwareab.net\/wordpress\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"amazon\",\"item\":\"https:\/\/www.softwareab.net\/wordpress\/tag\/amazon\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Docker and Linux Networking: Custom Interfaces!\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/#website\",\"url\":\"https:\/\/www.softwareab.net\/wordpress\/\",\"name\":\"softwareab\",\"description\":\"Technocratica, Technopolitik, Technophobia\",\"publisher\":{\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/1337443eaeb75104e0410b508e67f600\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.softwareab.net\/wordpress\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/1337443eaeb75104e0410b508e67f600\",\"name\":\"Andrew Bruce\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2024\/03\/andy-cartoon.jpg\",\"contentUrl\":\"https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2024\/03\/andy-cartoon.jpg\",\"width\":400,\"height\":330,\"caption\":\"Andrew Bruce\"},\"logo\":{\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/image\/\"},\"description\":\"Team-oriented systems mentor with deep knowledge of numerous software methodologies, technologies, languages, and operating systems. Excited about turning emerging technology into working production-ready systems. Focused on moving software teams to a higher level of world-class application development. Specialties:Software analysis and development...Product management through the entire lifecycle...Discrete product integration specialist!\",\"sameAs\":[\"http:\/\/cloudraticsolutions.net\/\",\"https:\/\/www.facebook.com\/cloudraticsolutions\/\",\"https:\/\/twitter.com\/realcloudratics\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Docker and Linux Networking: Custom Interfaces! - softwareab","description":"Connect underlying Docker containers on an EC2 instance dynamically to Linux bridged interfaces. Helps with running Dynamips emulated routers on AWS!","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.softwareab.net\/wordpress\/docker-linux-networking-custom-interfaces\/","og_locale":"en_US","og_type":"article","og_title":"Docker and Linux Networking: Custom Interfaces! - softwareab","og_description":"Connect underlying Docker containers on an EC2 instance dynamically to Linux bridged interfaces. Helps with running Dynamips emulated routers on AWS!","og_url":"https:\/\/www.softwareab.net\/wordpress\/docker-linux-networking-custom-interfaces\/","og_site_name":"softwareab","article_publisher":"https:\/\/www.facebook.com\/cloudraticsolutions\/","article_author":"https:\/\/www.facebook.com\/cloudraticsolutions\/","article_published_time":"2016-11-02T05:21:59+00:00","article_modified_time":"2016-11-02T23:37:13+00:00","og_image":[{"url":"http:\/\/i6.photobucket.com\/albums\/y240\/Mythsyin\/labq.jpg"}],"author":"Andrew Bruce","twitter_card":"summary_large_image","twitter_creator":"@realcloudratics","twitter_site":"@realcloudratics","twitter_misc":{"Written by":"Andrew Bruce","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.softwareab.net\/wordpress\/docker-linux-networking-custom-interfaces\/#article","isPartOf":{"@id":"https:\/\/www.softwareab.net\/wordpress\/docker-linux-networking-custom-interfaces\/"},"author":{"name":"Andrew Bruce","@id":"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/1337443eaeb75104e0410b508e67f600"},"headline":"Docker and Linux Networking: Custom Interfaces!","datePublished":"2016-11-02T05:21:59+00:00","dateModified":"2016-11-02T23:37:13+00:00","mainEntityOfPage":{"@id":"https:\/\/www.softwareab.net\/wordpress\/docker-linux-networking-custom-interfaces\/"},"wordCount":910,"commentCount":0,"publisher":{"@id":"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/1337443eaeb75104e0410b508e67f600"},"image":{"@id":"https:\/\/www.softwareab.net\/wordpress\/docker-linux-networking-custom-interfaces\/#primaryimage"},"thumbnailUrl":"http:\/\/i6.photobucket.com\/albums\/y240\/Mythsyin\/labq.jpg","keywords":["amazon","centos","docker","dynagen\/dynamips","ec2","network","virtualization"],"articleSection":["Docker","Teknocratica"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.softwareab.net\/wordpress\/docker-linux-networking-custom-interfaces\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.softwareab.net\/wordpress\/docker-linux-networking-custom-interfaces\/","url":"https:\/\/www.softwareab.net\/wordpress\/docker-linux-networking-custom-interfaces\/","name":"Docker and Linux Networking: Custom Interfaces! - softwareab","isPartOf":{"@id":"https:\/\/www.softwareab.net\/wordpress\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.softwareab.net\/wordpress\/docker-linux-networking-custom-interfaces\/#primaryimage"},"image":{"@id":"https:\/\/www.softwareab.net\/wordpress\/docker-linux-networking-custom-interfaces\/#primaryimage"},"thumbnailUrl":"http:\/\/i6.photobucket.com\/albums\/y240\/Mythsyin\/labq.jpg","datePublished":"2016-11-02T05:21:59+00:00","dateModified":"2016-11-02T23:37:13+00:00","description":"Connect underlying Docker containers on an EC2 instance dynamically to Linux bridged interfaces. Helps with running Dynamips emulated routers on AWS!","breadcrumb":{"@id":"https:\/\/www.softwareab.net\/wordpress\/docker-linux-networking-custom-interfaces\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.softwareab.net\/wordpress\/docker-linux-networking-custom-interfaces\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.softwareab.net\/wordpress\/docker-linux-networking-custom-interfaces\/#primaryimage","url":"http:\/\/i6.photobucket.com\/albums\/y240\/Mythsyin\/labq.jpg","contentUrl":"http:\/\/i6.photobucket.com\/albums\/y240\/Mythsyin\/labq.jpg"},{"@type":"BreadcrumbList","@id":"https:\/\/www.softwareab.net\/wordpress\/docker-linux-networking-custom-interfaces\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.softwareab.net\/wordpress\/"},{"@type":"ListItem","position":2,"name":"amazon","item":"https:\/\/www.softwareab.net\/wordpress\/tag\/amazon\/"},{"@type":"ListItem","position":3,"name":"Docker and Linux Networking: Custom Interfaces!"}]},{"@type":"WebSite","@id":"https:\/\/www.softwareab.net\/wordpress\/#website","url":"https:\/\/www.softwareab.net\/wordpress\/","name":"softwareab","description":"Technocratica, Technopolitik, Technophobia","publisher":{"@id":"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/1337443eaeb75104e0410b508e67f600"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.softwareab.net\/wordpress\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/1337443eaeb75104e0410b508e67f600","name":"Andrew Bruce","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/image\/","url":"https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2024\/03\/andy-cartoon.jpg","contentUrl":"https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2024\/03\/andy-cartoon.jpg","width":400,"height":330,"caption":"Andrew Bruce"},"logo":{"@id":"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/image\/"},"description":"Team-oriented systems mentor with deep knowledge of numerous software methodologies, technologies, languages, and operating systems. Excited about turning emerging technology into working production-ready systems. Focused on moving software teams to a higher level of world-class application development. Specialties:Software analysis and development...Product management through the entire lifecycle...Discrete product integration specialist!","sameAs":["http:\/\/cloudraticsolutions.net\/","https:\/\/www.facebook.com\/cloudraticsolutions\/","https:\/\/twitter.com\/realcloudratics"]}]}},"_links":{"self":[{"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/posts\/1024"}],"collection":[{"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/comments?post=1024"}],"version-history":[{"count":3,"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/posts\/1024\/revisions"}],"predecessor-version":[{"id":1028,"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/posts\/1024\/revisions\/1028"}],"wp:attachment":[{"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/media?parent=1024"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/categories?post=1024"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/tags?post=1024"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}