netstart
SYNOPSIS
$ /etc/netstart [[-n] interface ...]
DESCRIPTION
netstart
is the command script that is invoked by rc(8) during an automatic reboot and after single-user mode is exited; it performs network initialization.
The netstart
script can also be used to start newly created bridges or interfaces, or reset existing interfaces to their default state. The behaviour of this script is (or can be) controlled to some extent by variables defined in rc.conf(8), which specifies which daemons and services are to be run.
During the system boot, netstart
is executed. netstart
performs the following operations, in the sequence given:
- Configure the loopback interface.
- Configure all physical interfaces.
- Configure non-physical interfaces that can provide the default gateway, such as aggr(4), trunk(4), svlan(4), vlan(4), carp(4), and pppoe(4).
- Initialize the routing table and set up the default routes.
- Configure tunnel interfaces that require a working network to reach the other end of the tunnel, such as tun(4), tap(4), gif(4), etherip(4), gre(4), egre(4), pflow(4), and wg(4).
After the system is completely initialized, it is possible to start a newly created interface or bridge(4), or reset an existing interface to its default state, by invoking the following, where foo0 is the interface or bridge name:
$ sh /etc/netstart foo0
Using the -n
option reports the steps that would be taken, without actually configuring the interface.
ifconfig
- View/Mange Network Interfaces
To display the NIC configuration, enter the following command:
$ ifconfig
dc0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=80008<VLAN_MTU,LINKSTATE>
ether 00:a0:cc:da:da:da
inet 192.168.1.3 netmask 0xffffff00 broadcast 192.168.1.255
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
dc1: flags=8802<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=80008<VLAN_MTU,LINKSTATE>
ether 00:a0:cc:da:da:db
inet 10.0.0.1 netmask 0xffffff00 broadcast 10.0.0.255
media: Ethernet 10baseT/UTP
status: no carrier
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
options=3<RXCSUM,TXCSUM>
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x4
inet6 ::1 prefixlen 128
inet 127.0.0.1 netmask 0xff000000
nd6 options=3<PERFORMNUD,ACCEPT_RTADV>
In this example, the following devices were displayed:
dc0
: The first Ethernet interface.dc1
: The second Ethernet interface.lo0
: The loopback device.
FreeBSD uses the driver name followed by the order in which the card is detected at boot to name the NIC. For example, sis2
is the third NIC on the system using the sis(4) driver.
In this example, dc0
is up and running. The key indicators are:
UP
means that the card is configured and ready.- The card has an Internet (
inet
) address,192.168.1.3
. - It has a valid subnet mask (
netmask
), where0xffffff00
is the same as255.255.255.0
. - It has a valid broadcast address,
192.168.1.255
. - The MAC address of the card (
ether
) is00:a0:cc:da:da:da
. - The physical media selection is on autoselection mode (
media: Ethernet autoselect (100baseTX <full-duplex>)
). In this example,dc1
is configured to run with10baseT/UTP
media. For more information on available media types for a driver, refer to its manual page. - The status of the link (
status
) isactive
, indicating that the carrier signal is detected. Fordc1
, thestatus: no carrier
status is normal when an Ethernet cable is not plugged into the card.
View Network Interface Info
$ ifconfig [interface_name]
# e.g.,
$ ifconfig em0
Manage Network Interfaces
To stop network card (NIC) on-fly:
$ ifconfig [network-interface] down
To start network card (NIC) on fly:
$ ifconfig [network-interface] up
为 interface 设置 statis IP
# Assign the IPv4 address 192.0.2.10, with a network mask of 255.255.255.0, to the interface fxp0:
$ ifconfig fxp0 inet 192.0.2.10 netmask 255.255.255.0
# Add the IPv6 address 2001:DB8:DBDB::123/48 to the interface em0:
$ ifconfig em0 inet6 2001:db8:bdbd::123 prefixlen 48 alias
Misc
# Remove the IPv4 address 192.0.2.45 from the interface ed0:
$ ifconfig ed0 inet 192.0.2.45 -alias
# Enable IPv6 functionality of the interface:
$ ifconfig em0 inet6 -ifdisabled
# Create the software network interface gif1:
$ ifconfig gif1 create
# Destroy the software network interface gif1:
$ ifconfig gif1 destroy
dhclient
- Set DHCP for an Interface
$ dhclient <interface>
# For example:
$ dhclient vmx1
$ service dhclient restart {interface-name-here}
# e.g.,
$ service dhclient restart em0
Check https://www.freebsd.org/cgi/man.cgi?dhclient for details.
route
- 路由设置
View Route Table
-r
: When netstat is invoked with the routing table option -r, it llists the available routes and their status. Each route consists ofa destination host or network, and a gateway to use in forwarding packets.-n
: Do not resolve numeric addresses and port numbers to names.
$ netstat -rn
Routing tables
Internet:
Destination Gateway Flags Netif Expire
default 10.0.0.1 UGS nfe0
10.0.0.0/24 link#2 U nfe0
10.0.0.240 link#2 UHS lo0
127.0.0.1 link#3 UH lo0
192.168.0.0/24 link#1 U re0
192.168.0.1 link#1 UHS lo0
192.168.48.0/22 link#4 U wlan0
192.168.49.167 link#4 UHS lo0
Add
Default Route
#A shorter version of adding a default route can also be written as:
$ route add default 192.168.1.1
# Specify by interface
$ route add default -iface em0
Normal Route
# Add a static route to the 172.16.10.0/24 network via the 172.16.1.1 gateway
$ route add -net 172.16.10.0/24 172.16.1.1
# Or
$ route add 172.16.10.0/24 192.168.48.1
# Or
$ route add -net 172.16.10.0 -netmask 255.255.255.0 192.168.48.1
# Add a static route to a host 8.8.8.8 via the 192.168.48.1 gateway
$ route add -host 8.8.8.8 192.168.48.1
# Specify by interface
$ route add 172.16.2.0/24 -iface em0
Demo
$ netstat -r
Routing tables
Internet:
Destination Gateway Flags Netif Expire
localhost link#4 UH lo0
192.168.18.0/24 link#3 U em0
192.168.18.67 link#3 UHS lo0
# without that entity within the route table
$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
ping: sendto: No route to host
ping: sendto: No route to host
$ route add -host 8.8.8.8 192.168.18.1
add host 8.8.8.8: gateway 192.168.18.1
$ netstat -r
Routing tables
Internet:
Destination Gateway Flags Netif Expire
8.8.8.8 192.168.18.1 UGHS em0
localhost link#4 UH lo0
192.168.18.0/24 link#3 U em0
192.168.18.67 link#3 UHS lo0
$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: icmp_seq=0 ttl=118 time=4.615 ms
64 bytes from 8.8.8.8: icmp_seq=1 ttl=118 time=4.477 ms
...
$ traceroute 8.8.8.8
traceroute to 8.8.8.8 (8.8.8.8), 64 hops max, 40 byte packets
1 192.168.18.1 (192.168.18.1) 0.657 ms 0.597 ms 0.418 ms
...
Delete
# Delete a static route from the routing table:
$ route delete -net 172.16.10.0/24 172.16.1.2
$ route delete -host 8.8.8.8 192.168.18.1
# Or
$ route delete 8.8.8.8 192.168.18.1
$ route delete default 192.168.18.1
# Delete by specifying the interface
$ route delete -host 8.8.8.8 -iface ix1
$ route delete 172.16.2.0/24 -iface em0
# Remove all routes from the routing table:
$ route flush
Route Test
When without routing for a specific destination
$ netstat -r
Routing tables
Internet:
Destination Gateway Flags Netif Expire
localhost link#4 UH lo0
192.168.18.0/24 link#3 U em0
192.168.18.67 link#3 UHS lo0
# When without routing for a specific destination
$ route show 8.8.8.8
route: route has not been found
Normal case:
$ route add -host 8.8.8.8 192.168.18.1
add host 8.8.8.8: gateway 192.168.18.1
$ netstat -r
Routing tables
Internet:
Destination Gateway Flags Netif Expire
8.8.8.8 192.168.18.1 UGHS em0
localhost link#4 UH lo0
192.168.18.0/24 link#3 U em0
192.168.18.67 link#3 UHS lo0
# Display the route for a destination network
$ route show 8.8.8.8
route to: 8.8.8.8
destination: default
mask: default
gateway: 192.168.18.67
fib: 0
interface: em0
flags: <UP,GATEWAY,DONE,STATIC>
recvpipe sendpipe ssthresh rtt,msec mtu weight expire
0 0 0 0 1500 1 0
ARP
//TODO
Bridge
The bridge is created using interface cloning. To create the bridge interface:
$ ifconfig bridge create
bridge2
$ ifconfig bridge2
bridge2: flags=8802<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500
ether 02:cf:b7:b1:ab:02
id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15
maxage 20 holdcnt 6 proto stp-rstp maxaddr 2000 timeout 1200
root id 00:00:00:00:00:00 priority 0 ifcost 0 port 0
groups: bridge
nd6 options=1<PERFORMNUD>
When a bridge interface is created, it is automatically assigned a randomly generated Ethernet address. The maxaddr
and timeout
parameters control how many MAC addresses the bridge will keep in its forwarding table and how many seconds before each entry is removed after it is last seen. The other parameters control how STP operates.
Next, specify which network interfaces to add as members of the bridge. For the bridge to forward packets, all member interfaces and the bridge need to be up:
$ ifconfig bridge0 addm fxp0 addm fxp1 up
$ ifconfig fxp0 up
$ ifconfig fxp1 up
$ ifconfig bridge0
bridge0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500
ether 02:cf:b7:b1:ab:01
inet 0.0.0.0 netmask 0xff000000 broadcast 255.255.255.255
id 00:00:00:00:00:00 priority 32768 hellotime 2 fwddelay 15
maxage 20 holdcnt 6 proto stp-rstp maxaddr 2000 timeout 1200
root id 00:00:00:00:00:00 priority 32768 ifcost 0 port 0
member: fxp0 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
ifmaxaddr 0 port 2 priority 128 path cost 2000
member: fxp1 flags=143<LEARNING,DISCOVER,AUTOEDGE,AUTOPTP>
ifmaxaddr 0 port 1 priority 128 path cost 2000
groups: bridge
nd6 options=9<PERFORMNUD,IFDISABLED>
If the bridge host needs an IP address, set it on the bridge interface, not on the member interfaces. The address can be set statically or via DHCP. This example sets a static IP address:
$ ifconfig bridge0 inet 192.168.0.1/24
Set DNS
$ vim /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4
$ sh /etc/rc
$ /etc/netstart
Check the /etc/rc.conf
config
If you wanna any changes within /etc/re.conf
take effect immediately:
$ service netif restart && service routing restart
$ sh /etc/rc
$ /etc/netstart
Once the necessary changes to /etc/rc.conf
are saved, a reboot can be used to test the network configuration and to verify that the system restarts without any configuration errors. Alternatively, apply the settings to the networking system with this command:
$ service netif restart
# Or
$ ./etc/netstart
Setting a Static IPv4 Address and Gateway
为 interface 设置 statis IP,重启后生效,且永久生效:
$ vim /etc/rc.conf
Add the following:
ifconfig_em0="inet 192.168.0.254 netmask 255.255.255.0"
defaultrouter="192.168.0.1"
Setting DHCP for an Interface
To set a DHCP address for a network interface on a FreeBSD host, you can edit the system configuration file /etc/rc.conf
. For example, to set the network interface em0 to DHCP, you set would do the following.
$ vim /etc/rc.conf
Add the following:
ifconfig_[interface]="DHCP", e.g., ifconfig_em0="DHCP"
Set a Bridge
The bridge can now forward Ethernet frames between fxp0
and fxp1
. Add the following lines to /etc/rc.conf
so the bridge is created at startup:
cloned_interfaces="bridge0"
ifconfig_bridge0="addm fxp0 addm fxp1 up"
ifconfig_fxp0="up"
ifconfig_fxp1="up"
Related Files
/etc/dhclient.conf
dhclient
requires a configuration file,/etc/dhclient.conf
. Typically the file contains only comments, the defaults being reasonably sane. This configuration file is described by the dhclient.conf(5) manual page.
/sbin/dhclient
dhclient
is statically linked and resides in/sbin
. The dhclient(8) manual page gives more information aboutdhclient
.
/sbin/dhclient-script
dhclient-script
is the FreeBSD-specific DHCP client configuration script. It is described in dhclient-script(8), but should not need any user modification to function properly.
/var/db/dhclient.leases
- The DHCP client keeps a database of valid leases in this file, which is written as a log. dhclient.leases(5) gives a slightly longer description.
Reference
Official
- https://www.freebsd.org/cgi/man.cgi?ifconfig(8)
- https://www.freebsd.org/cgi/man.cgi?route
- https://www.freebsd.org/cgi/man.cgi?query=dhclient
- https://man.openbsd.org/netstart.8
- https://linux.die.net/man/8/dhclient
- https://www.freebsd.org/cgi/man.cgi?query=netstat
Route
Misc
- https://docs.freebsd.org/en_US.ISO8859-1/books/handbook/config-network-setup.html
- https://www.cyberciti.biz/tips/freebsd-how-to-start-restart-stop-network-service.html
- https://superuser.com/questions/151735/how-to-set-static-ip-address-on-the-freebsd-machine
- https://www.serverlab.ca/tutorials/unix/how-to-set-static-ip-and-dhcp-in-freebsd/
- https://neoserver.site/help/configuring-freebsd-network-interface
- https://forums.freebsd.org/threads/setting-up-static-ip-address.46025/