TUTORIALS 》 IP-in-IP Tunneling Demystified - VPN Tunnels

There can be many ways one can architect VPN Networks. The end objective is to tunnel private IP (typically LAN subnets) within public IP Networks (such as Internet). You can establish such a tunnel in various creative ways, such as Transport Mode, Tunnel Mode, IP-in-IP tunneling, etc. Also you can choose any transport layer protocol of your choice such as send VPN traffic via TCP, or via UDP and so on.

Sometimes since our objective is to just create a tunnel on public Internet (i.e L3 Routed Network), we may never need a transport layer. In such cases, we can just tunnel via IP-in-IP alone as shown below:
ip in ip scenarios VPN Tunnels
Since the routers operate in Layer-3, such VPN packets in theory will perfectly work and will reach the intended destination. From there the VPN server(s) or an app can recreate original LAN packets.

So if you see that way we can compare the VPN packet encapsulation differences between just IP-in-IP vs via added Transport Layer (either TCP or UDP).
IP in IP vs TCP UDP tunnels

In some weird situation if this VPN data (in this case IP-in-IP) is encapsulated inside another VPN Network (again IP-in-IP), then you can get into a weird scenario like this as shown below. Although it is perfectly fine to do as per the IPv4 routed network standards, we should know the fact that each VPN tunnel/layer will reduce the MTU of the actual application payload due to all those extra added headers and as well performance due to encapsulation as well possibly VPN tunnel compression.
Nested IP in IP VPN Tunnels

For VPNs which are built via Transport Layer network sockets (such as TCP/ UDP), one can choose either of the protocols. Since what we send the LAN data itself could be end-to-end TCP sessions which has reliability in place, we don't need strictly VPNs with TCP as its Transport Layer protocol such as TCP. Instead we can use UDP itself. Which is why I say always UDP is nothing but Layer-2 on IPv4 Networks.
VPN Tunnel Reliability

PacketLife.net Packet Captures - https://packetlife.net/captures/category/tunne ...
IP in IP tunneling - https://en.wikipedia.org/wiki/IP_in_IP

Here is an extensive Youtube video of mine on the same with a deeper insight on the same with some live packet analysis:

I would also recommend this below Youtube video episode of mine shot long ago before I published my earlier video. In which I discussed overall VPN architecture, design possibilities and compared the architecture with live real-world examples:

Also recommend to watch:

Featured Video:

Suggested Topics:

☆ Tutorials :: Arduino UNO Projects ↗

☆ Tutorials :: Network Software Development ↗

☆ Tutorials :: Research and Projects ↗

☆ Tutorials :: Linux (user-space), Systems Architecture ↗

☆ Tutorials :: Linux Kernel Software Development ↗

☆ Tutorials :: Linux Kernel Internals (PDFs) - by Ramin Farajpour ↗

☆ Tutorials :: Software Development (Programming) Tools ↗

☆ Tutorials :: Embedded Projects ↗

Join The Linux Channel :: Facebook Group ↗

Visit The Linux Channel :: on Youtube ↗

Join a course:

💎 Linux, Kernel, Networking and Device Drivers: PDF Brochure
💎 PhD or equivalent (or Post Doctoral) looking for assistance: Details
💎 ... or unlimited life-time mentorship: Details

💗 Help shape the future: Sponsor/Donate

Recommended Topics:
Featured Video:
Watch on Youtube - [3757//0] Linux Kernel Programming - atomic_t datatype - atomic variables and APIs ↗

Roadmap - How to become Linux Kernel Developer - Device Drivers Programmer and a Systems Software Expert ↗
Wednesday' 15-Jul-2020
Many viewers and even sometimes my students ask me how I can become a kernel programmer or just device driver developer and so on. So I shot this video (and an add-on video) where I summarized steps and a roadmap to become a full-fledged Linux Kernel Developer.

Linux Kernel Module to Drop Packets captured via netfilter hooks ↗
Wednesday' 15-Jul-2020
Here is my sample Kernel Module to drop packets (i.e sk_buff instance) captured via netfilter hooks. When you want to drop packets in your custom netfilter hooks make sure you never do a manual kfree_skb(skb) API call. Since it is anyway performed once the flow of the code moves out of your kernel module netfilter hook. All you need to do is to return NF_DROP to drop gracefully the desired packet. Here is my detailed video and a sample Linux Kernel module.

Weekly News Digest - Week 02 - July 2020 ↗
Wednesday' 15-Jul-2020
The Linux Channel :: Weekly News Digest - Week 02 - July 2020
> Google is teaming up with Ubuntu to bring Flutter apps to Linux
> Linux kernel developers: This new BLM coding style avoids words like blacklist
> Zstd'ing The Kernel Might See Mainline With Linux 5.9 For Faster Boot Times
> Linux 5.9 To Bring Arm Memory Tagging Extension Support
> Linux Kernel Raising Compiler Build Requirement To GCC 4.9
> Linux Developers May Discuss Allowing Rust Code Within The Kernel
> Premio Unveils Intel 9th Gen Industrial Motherboard For Advanced Embedded And IoT Solutions

CEO, CTO Talk ↗
Wednesday' 15-Jul-2020

Arduino UNO - RO Water Purifier Controller ↗
Wednesday' 15-Jul-2020
Here is a Youtube VLOG of my DIY RO Water Purifier Controller done via Arduino UNO. I want the Arduino UNO to control the RO pump, so that it pumps for a specific duration and stops automatically. This is done via Opto-isolated 4 Channel 5V 10A Relay Board meant for Arduino UNO, Raspberry Pi or similar SoC boards which offers GPIO pins. To this relay I have connected the RO water purifier booster pump which works at 24V DC connected via 220V AC to 24V DC power supply adaptar. I have also connected a small active 5V buzzer to notify the progress and completion as it fills the tank/canister.

Data-Plane and Control-Plane of a Networking Device ↗
Wednesday' 15-Jul-2020

AT&T Archives: The UNIX Operating System ↗
Wednesday' 15-Jul-2020

Socket Options - Socket Programming - setsockopt(), getsockopt() ↗
Wednesday' 15-Jul-2020

PyDelhi + PyData + ILUG-D + Linux Chix meetup mash @ Sarai on 17-Dec-2016 ↗
Wednesday' 15-Jul-2020

Tour of my new Home Networking Lab within VirtualBox VM ↗
Wednesday' 15-Jul-2020

Trending Video:
Watch on Youtube - [3011//0] Q&A - Routing vs Bridging in Linux Kernel Network-stack ↗

Online Course - Networking Protocols ↗
Wednesday' 15-Jul-2020

Recommended Video:
Watch on Youtube - [2983//0] Linux RAW Sockets - Generate VoIP SIP Packets ↗