6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

Linuxだとipコマンドだけど、FreeBSDはifconfigが現役。

「古い」って言われるけど、FreeBSDのifconfigはLinuxのip以上に高機能だったりする。

今回はFreeBSDのネットワーク設定を完全解説。

インターフェース確認

ifconfig

ifconfig
em0: flags=8863<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=4e527bb<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,TSO4,TSO6,LRO,WOL_UCAST,WOL_MCAST,WOL_MAGIC,VLAN_HWFILTER,VLAN_HWTSO,RXCSUM_IPV6,TXCSUM_IPV6>
        ether 00:11:22:33:44:55
        inet 192.168.1.100 netmask 0xffffff00 broadcast 192.168.1.255
        inet6 fe80::211:22ff:fe33:4455%em0 prefixlen 64 scopeid 0x1
        media: Ethernet autoselect (1000baseT <full-duplex>)
        status: active
        nd6 options=23<PERFORMNUD,ACCEPT_RTADV,AUTO_LINKLOCAL>
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
        options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
        inet 127.0.0.1 netmask 0xff000000
        groups: lo
        nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>

特定インターフェースだけ

ifconfig em0

シンプル表示

ifconfig -l  # インターフェース名一覧
# em0 lo0 bridge0

ifconfig -u  # UPしてるものだけ

IPアドレス設定

静的IP

# 一時的に設定
ifconfig em0 inet 192.168.1.100 netmask 255.255.255.0

# または CIDR表記
ifconfig em0 inet 192.168.1.100/24

# ブロードキャストも指定
ifconfig em0 inet 192.168.1.100 netmask 255.255.255.0 broadcast 192.168.1.255

永続設定(/etc/rc.conf)

# /etc/rc.conf
ifconfig_em0="inet 192.168.1.100 netmask 255.255.255.0"
defaultrouter="192.168.1.1"
# sysrcで設定(推奨)
sysrc ifconfig_em0="inet 192.168.1.100 netmask 255.255.255.0"
sysrc defaultrouter="192.168.1.1"

DHCP

# /etc/rc.conf
ifconfig_em0="DHCP"
sysrc ifconfig_em0="DHCP"

IPv6

# 静的
ifconfig em0 inet6 2001:db8::100 prefixlen 64

# SLAAC(自動設定)
sysrc ifconfig_em0_ipv6="inet6 accept_rtadv"
sysrc rtsold_enable="YES"

複数IPアドレス(エイリアス)

# 一時的
ifconfig em0 alias 192.168.1.101/24

# 永続
sysrc ifconfig_em0_alias0="inet 192.168.1.101 netmask 255.255.255.255"
sysrc ifconfig_em0_alias1="inet 192.168.1.102 netmask 255.255.255.255"

ルーティング

ルーティングテーブル確認

netstat -rn
Routing tables

Internet:
Destination        Gateway            Flags     Netif Expire
default            192.168.1.1        UGS         em0
127.0.0.1          link#2             UH          lo0
192.168.1.0/24     link#1             U           em0
192.168.1.100      link#1             UHS         lo0

Internet6:
Destination        Gateway            Flags     Netif Expire
::1                link#2             UHS         lo0
fe80::%em0/64      link#1             U           em0
fe80::1%lo0        link#2             UHS         lo0

デフォルトゲートウェイ

# 一時的
route add default 192.168.1.1

# 永続
sysrc defaultrouter="192.168.1.1"

静的ルート追加

# 一時的
route add -net 10.0.0.0/8 192.168.1.254

# 永続
sysrc static_routes="internal"
sysrc route_internal="-net 10.0.0.0/8 192.168.1.254"

ルート削除

route delete default
route delete -net 10.0.0.0/8

DNS設定

# /etc/resolv.conf
nameserver 8.8.8.8
nameserver 8.8.4.4
search example.com

DHCPの場合は自動設定される。上書きされたくなければ:

# /etc/dhclient.conf
supersede domain-name-servers 8.8.8.8, 8.8.4.4;

ホスト名

# 確認
hostname
# freebsd.example.com

# 一時変更
hostname newname.example.com

# 永続設定
sysrc hostname="newname.example.com"

ブリッジ

作成

# インターフェース作成
ifconfig bridge0 create

# メンバー追加
ifconfig bridge0 addm em0 addm em1

# UP
ifconfig bridge0 up

# IPアドレスを設定(オプション)
ifconfig bridge0 inet 192.168.1.100/24

永続設定

sysrc cloned_interfaces="bridge0"
sysrc ifconfig_bridge0="addm em0 addm em1 up"
sysrc ifconfig_bridge0_alias0="inet 192.168.1.100/24"

VLAN

# VLAN 100を作成
ifconfig vlan100 create

# 親インターフェースとVLAN IDを設定
ifconfig vlan100 vlan 100 vlandev em0

# IPアドレス設定
ifconfig vlan100 inet 192.168.100.1/24

# UP
ifconfig vlan100 up

永続設定

sysrc vlans_em0="100 200"
sysrc ifconfig_vlan100="inet 192.168.100.1/24"
sysrc ifconfig_vlan200="inet 192.168.200.1/24"

LAGG(リンクアグリゲーション)

# LAGGインターフェース作成
ifconfig lagg0 create

# LAGGプロトコル設定(LACP)
ifconfig lagg0 laggproto lacp

# メンバー追加
ifconfig lagg0 laggport em0 laggport em1

# IPアドレス
ifconfig lagg0 inet 192.168.1.100/24

# UP
ifconfig lagg0 up

永続設定

sysrc cloned_interfaces="lagg0"
sysrc ifconfig_em0="up"
sysrc ifconfig_em1="up"
sysrc ifconfig_lagg0="laggproto lacp laggport em0 laggport em1 192.168.1.100/24"

netstatで状態確認

接続中のソケット

netstat -an
Active Internet connections (including servers)
Proto Recv-Q Send-Q Local Address          Foreign Address        (state)
tcp4       0      0 *.22                   *.*                    LISTEN
tcp4       0      0 192.168.1.100.22       192.168.1.50.52342     ESTABLISHED
tcp4       0      0 *.80                   *.*                    LISTEN
udp4       0      0 *.68                   *.*

特定ポートだけ

netstat -an | grep ':22'

プロセス情報付き

sockstat -l  # LISTENしてるもの
sockstat -4  # IPv4のみ
sockstat -c  # 接続中のみ
USER     COMMAND    PID   FD PROTO  LOCAL ADDRESS         FOREIGN ADDRESS
root     sshd       1234  4  tcp4   *:22                  *:*
www      nginx      5678  6  tcp4   *:80                  *:*

インターフェース統計

netstat -i
Name    Mtu Network       Address              Ipkts Ierrs Idrop    Opkts Oerrs  Coll
em0    1500 <Link#1>      00:11:22:33:44:55 12345678     0     0  9876543     0     0
em0       - 192.168.1.0   192.168.1.100     12345678     -     -  9876543     -     -
lo0   16384 <Link#2>      lo0                  12345     0     0    12345     0     0
lo0       - localhost     lo0                  12345     -     -    12345     -     -

プロトコル統計

netstat -s -p tcp   # TCP統計
netstat -s -p udp   # UDP統計
netstat -s -p icmp  # ICMP統計

カーネルパラメータ(sysctl)

よく使う設定

# IP転送(ルーターにする)
sysctl net.inet.ip.forwarding=1

# 永続化
sysrc gateway_enable="YES"

# TCP最適化
sysctl net.inet.tcp.recvspace=65536
sysctl net.inet.tcp.sendspace=65536

# TCP keepalive
sysctl net.inet.tcp.keepidle=600000
sysctl net.inet.tcp.keepintvl=30000

# SYN cookie(DoS対策)
sysctl net.inet.tcp.syncookies=1

永続化(/etc/sysctl.conf)

# /etc/sysctl.conf
net.inet.ip.forwarding=1
net.inet.tcp.recvspace=65536
net.inet.tcp.sendspace=65536

トラブルシューティング

pingが通らない

# 基本確認
ping 8.8.8.8

# インターフェース確認
ifconfig em0

# ルート確認
netstat -rn

# ARPテーブル確認
arp -an

# ファイアウォール確認
pfctl -sr

DNSが引けない

# resolv.conf確認
cat /etc/resolv.conf

# 直接問い合わせ
drill @8.8.8.8 google.com
# または
host google.com 8.8.8.8

パケットキャプチャ

tcpdump -i em0 -n
tcpdump -i em0 -n port 80
tcpdump -i em0 -n host 192.168.1.50
tcpdump -i em0 -n -w capture.pcap

まとめ

FreeBSDのネットワーク設定:

  • ifconfig: インターフェース設定
  • route: ルーティング設定
  • netstat/sockstat: 状態確認
  • /etc/rc.conf + sysrc: 永続設定

Linuxのipコマンドよりifconfigの方が直感的だと思うのは俺だけ?

この記事が役に立ったら、いいね・ストックしてもらえると嬉しいです!

6
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?