The basic DHCP server is written in node js and saves user's data and configurations on the mongo database.
Very easy:)
- Expose port
67 - Clone
git clone https://github.com/sajad-sadra/mongo-dhcp.git
- Go to directory
cd mongo-dhcp/
- Edit enviroments variables on your proper values.
- Run
npm start
Enviroment variables that use in the deploy procedure and placed in .env file.
| Variable | Description |
|---|---|
| DB | URL of mongodb server |
| DB_LOG | if it was no then logs just print in the console. if yes then logs also add to the database |
| SERVER | local IP address of this DHCP server |
| ROUTER | default gateway of local network |
| NETMASK | subnet mask |
| BROADCAST | local network broadcast IP address(same network part with broadcast host part-255-) |
| DNS1,DNS2 | default nameservers(you can leave DNS2, blank) |
| LEASE | default lease time |
DHCP-server saves data and config of every device that connects to the network in this schema on MongoDB.
{
MAC: String,
IP: String,
Name: String,
Static: Boolean,
ReserveTime: Number,
Options: {
DNS: Array,
ExpireTime: Number,
Router: String,
},
}
If you change these properties in the database(for example with tools like mongoCompass) new value will applied for next request of device with no need to restart server.
| Variable | Description |
|---|---|
| MAC | physical network address of device |
| IP | IP-address that DHCP gave to this device |
| Name | name or comment just to ٰdetect or search easily in documents (first time it's automatically generated according to day and time but you should edit it) ) |
| Static | if it is false the document will be removed after lease time ended, but if it istrue this document will never be removed automatically |
| ReserveTime | code of time this document generated (don't change it) |
| DNS | array of nameserver that must be passed to clients during DHCP-ack |
| Router | network gateway that must be passed to client during DHCP-ack |
Every DHCP message that the device sends and server replies have been logged in this part with time and date (if environment DB_LOG=yes).
{
Day: String,
Time: String,
Contex: String,
}
Day and Time variable getten from server system time and date.