2015.10.05 updated > network device development - part 1: switch

113
Network Device Development PART 1 – Switch SEAN

Upload: cheng-yi-yu

Post on 23-Jan-2018

3.235 views

Category:

Software


0 download

TRANSCRIPT

Page 1: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Network Device Development

PART 1 – Switch

SEAN

Page 2: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Sean

• Developer

[email protected]

• https://www.facebook.com/erinus

Page 3: 2015.10.05 Updated > Network Device Development - Part 1: Switch

GitHub

https://github.com/erinus/NetworkDeviceDevelopment

Page 4: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Choose your Board

Page 5: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Simple, Support, Easy, …

X86 Board

Page 6: 2015.10.05 Updated > Network Device Development - Part 1: Switch

X86 Board with 6 Ethernet

Page 7: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Specification

Page 8: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Specification

Page 9: 2015.10.05 Updated > Network Device Development - Part 1: Switch

LAN-1037-6L

http://tw.taobao.com/item/42824613011.htm

Page 10: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Choose your Operating System

Page 11: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Simple, Clean, Easy, …

Debian

Page 12: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Debian 6.0.10

http://cdimage.debian.org/mirror/cdimage/archive/6.0.10/i386/iso-cd/debian-6.0.10-i386-

businesscard.iso

Debian 7.9.0

http://cdimage.debian.org/mirror/cdimage/archive/7.9.0/i386/iso-cd/debian-7.9.0-i386-netinst.iso

Page 13: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Choose your Virtual Machine

Page 14: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Simple, Stable, Fast, …

VMware Workstation

Page 15: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Setup your Board

Page 16: 2015.10.05 Updated > Network Device Development - Part 1: Switch

X86 Board with 6 Ethernet

eth5 eth4 eth3 eth2 eth1 eth0

Page 17: 2015.10.05 Updated > Network Device Development - Part 1: Switch

X86 Board with 6 Ethernet

Internet

mSATA mSATA

RAM

USBDVD-ROM

Page 18: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Setup your Virtual Machine

Page 19: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Simple, Stable, Fast, …

VMware Workstation

Page 20: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Virtual Network Editor

Add Network: VMnet2, VMnet3, …, VMnet8

Page 21: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Virtual Network Editor

Modify IP number (192.168.10X.0) to match VMnetX for debugging

Modify this

Page 22: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Virtual Network Editor

Uncheck "Connect a host virtual adapter to this network" to make isolated subnet

Uncheck this

Page 23: 2015.10.05 Updated > Network Device Development - Part 1: Switch

New Virtual Machine

Page 24: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Install Operating System Later

Page 25: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Choose Guest Operating System

Linux + Debian 6

Linux + Debian 7

Page 26: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Name and Location

Page 27: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Disk Capacity

32+ GB

Page 28: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Customize Hardware Profile

Page 29: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Add 6 Virtual Network Adapter

Page 30: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Done

Page 31: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Install your Operating System

Page 32: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Splash Screen

Install

Page 33: 2015.10.05 Updated > Network Device Development - Part 1: Switch
Page 34: 2015.10.05 Updated > Network Device Development - Part 1: Switch
Page 35: 2015.10.05 Updated > Network Device Development - Part 1: Switch
Page 36: 2015.10.05 Updated > Network Device Development - Part 1: Switch
Page 37: 2015.10.05 Updated > Network Device Development - Part 1: Switch
Page 38: 2015.10.05 Updated > Network Device Development - Part 1: Switch
Page 39: 2015.10.05 Updated > Network Device Development - Part 1: Switch
Page 40: 2015.10.05 Updated > Network Device Development - Part 1: Switch
Page 41: 2015.10.05 Updated > Network Device Development - Part 1: Switch
Page 42: 2015.10.05 Updated > Network Device Development - Part 1: Switch
Page 43: 2015.10.05 Updated > Network Device Development - Part 1: Switch
Page 44: 2015.10.05 Updated > Network Device Development - Part 1: Switch
Page 45: 2015.10.05 Updated > Network Device Development - Part 1: Switch
Page 46: 2015.10.05 Updated > Network Device Development - Part 1: Switch
Page 47: 2015.10.05 Updated > Network Device Development - Part 1: Switch
Page 48: 2015.10.05 Updated > Network Device Development - Part 1: Switch
Page 49: 2015.10.05 Updated > Network Device Development - Part 1: Switch
Page 50: 2015.10.05 Updated > Network Device Development - Part 1: Switch
Page 51: 2015.10.05 Updated > Network Device Development - Part 1: Switch
Page 52: 2015.10.05 Updated > Network Device Development - Part 1: Switch
Page 53: 2015.10.05 Updated > Network Device Development - Part 1: Switch
Page 54: 2015.10.05 Updated > Network Device Development - Part 1: Switch
Page 55: 2015.10.05 Updated > Network Device Development - Part 1: Switch
Page 56: 2015.10.05 Updated > Network Device Development - Part 1: Switch
Page 57: 2015.10.05 Updated > Network Device Development - Part 1: Switch
Page 58: 2015.10.05 Updated > Network Device Development - Part 1: Switch
Page 59: 2015.10.05 Updated > Network Device Development - Part 1: Switch
Page 60: 2015.10.05 Updated > Network Device Development - Part 1: Switch
Page 61: 2015.10.05 Updated > Network Device Development - Part 1: Switch
Page 62: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Uncheck them to keepsmallest installation

Page 63: 2015.10.05 Updated > Network Device Development - Part 1: Switch
Page 64: 2015.10.05 Updated > Network Device Development - Part 1: Switch
Page 65: 2015.10.05 Updated > Network Device Development - Part 1: Switch
Page 66: 2015.10.05 Updated > Network Device Development - Part 1: Switch
Page 67: 2015.10.05 Updated > Network Device Development - Part 1: Switch
Page 68: 2015.10.05 Updated > Network Device Development - Part 1: Switch
Page 69: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Setup your Operating System

Page 70: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Reboot

Page 71: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Login by root

Page 72: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Remove account

$ deluser --remove-home user

Page 73: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Update and Upgrade

$ apt-get update

$ apt-get –y upgrade

$ apt-get –y dist-upgrade

Page 74: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Install Packages

$ apt-get install –y vim gcc g++ ssh make cmakeopenssh-server openssh-client binutils build-

essential git python python-dev python-pip zip unzip bzip2 bridge-utils

Page 75: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Check Kernel Version

Page 76: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Search Kernel Development Packages

Debian 6.0.10

VMware use linux-headers-2.6.32-5-686

Debian 7.8.0

VMware use linux-headers-3.2.0-4-686-pae

Page 77: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Search Kernel Development Packages

Debian 6.0.10

VMware use linux-headers-2.6.32-5-686

Debian 7.9.0

VMware use linux-headers-3.2.0-4-686-pae

Page 78: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Install Kernel Development Packages

Debian 6.0.10

$ apt-get install –y linux-headers-2.6.32-5-commonlinux-headers-2.6.32-5-686

Debian 7.9.0

$ apt-get install –y linux-headers-3.2.0-4-commonlinux-headers-3.2.0-4-686-pae

Page 79: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Final

# release 100+ MB

$ apt-get autoremove

$ apt-get autoclean

$ rm /var/cache/apt/archives/*.deb

Page 80: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Before Development

Page 81: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Development More Easily

Use SSH Client, SFTP Client, and Smart Text Editor

Page 82: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Recommended

Xshell

Xftp

Sublime Text

Page 83: 2015.10.05 Updated > Network Device Development - Part 1: Switch

First Kernel Module

Page 84: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Always

Page 85: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Hello World

Page 86: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Create Makefile

Return kernel version

Page 87: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Create main.c

Include Header File

Init$ insmod *.ko

Exit$ rmmod *.ko

Register Module

Page 88: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Clear Kernel Message Buffer

$ dmesg -c

Page 89: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Build

$ make

Page 90: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Install

$ make install

$ dmesg

Page 91: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Remove

$ make remove

$ dmesg

Page 92: 2015.10.05 Updated > Network Device Development - Part 1: Switch

About Netfilter

Page 93: 2015.10.05 Updated > Network Device Development - Part 1: Switch

PREROUTING POSTROUTING

IN

dest is localhost

?FORWARD

LOCALHOSTINPUT OUTPUT

OUT

Page 94: 2015.10.05 Updated > Network Device Development - Part 1: Switch

About Network Topology

Page 95: 2015.10.05 Updated > Network Device Development - Part 1: Switch

VMnet2

192.168.102.?

VMnet3

192.168.103.?

CLIENTUbuntu Desktop192.168.102.128

CLIENTUbuntu Desktop192.168.103.128

SWITCHDebian

VMnet1

NAT

eth1 eth2

eth0

Page 96: 2015.10.05 Updated > Network Device Development - Part 1: Switch

About Bridge-Utils

Page 97: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Set Promisc Mode

$ ifconfig eth1 0.0.0.0 promisc up

$ ifconfig eth2 0.0.0.0 promisc up

Page 98: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Create Bridge

$ brctl addbr br0

$ brctl setfd br0 0

# Debian 6.0.10

$ brctl sethello br0 0

# Debian 7.9.0

$ brctl sethello br0 1

$ brctl addif br0 eth1

$ brctl addif br0 eth2

$ brctl stp br0 off

$ ifconfig br0 up

Page 99: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Avoid Unknown Problems

$ echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts

$ echo 0 > /proc/sys/net/ipv4/ip_forward

$ echo 0 > /proc/sys/net/ipv4/tcp_syncookies

Page 100: 2015.10.05 Updated > Network Device Development - Part 1: Switch

First Netfilter Kernel Module

Page 101: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Modify main.c

Include Header Files

Forward Hook

Hook Declaration

Page 102: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Modify main.c

Include Header Files

Forward Hook

Hook Declaration

If one header miss,compilation still success.

But, operating systemwill crash when module inserting.

Page 103: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Modify main.c

Register Hook

Unregister Hook

Page 104: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Install

$ make

$ make install

$ dmesg

Page 105: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Test your Netfilter Kernel Module

Page 106: 2015.10.05 Updated > Network Device Development - Part 1: Switch

CLIENT of VMnet2

$ sudo ip route add 192.168.103.0/24 via 192.168.102.128

Page 107: 2015.10.05 Updated > Network Device Development - Part 1: Switch

CLIENT of VMnet3

$ sudo ip route add 192.168.102.0/24 via 192.168.103.128

Page 108: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Test on CLIENT of VMnet2

$ ping 192.168.103.128

For all packets, forwarding is accepted.

Page 109: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Modify main.c

Include Header Files

Forward Hook

Hook Declaration

Page 110: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Reinstall

$ make remove

$ make

$ make install

Page 111: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Test on CLIENT of VMnet2

$ ping 192.168.103.128

For all packets, forwarding is rejected.

Page 112: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Next Part

Page 113: 2015.10.05 Updated > Network Device Development - Part 1: Switch

Firewall 101