せんとくん
バージョン7からNetworkManagerの利用が推奨されているようですが、7以前のようにファイル編集でも設定はできます。
→(更新2025)RHEL9でnmcliでの設定方法も追加しました。まだまだ7を使っているところも多いかと思いますので、設定方法は残しておこうと思います。
■HOSTNAME確認・設定
# hostnamectl
でカーネルやらOS情報やらまとめて見れます。
[root@host01 /]# hostnamectl
Static hostname: host01
Icon name: computer-vm
Chassis: vm
Machine ID: 07346a5e12704a78a073eb9f111d5765
Boot ID: 848c64cbc5d942d2a7064fbf42540590
Virtualization: vmware
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-693.el7.x86_64
Architecture: x86-64
ホスト名設定
# hostname ホスト名
で変更できますが、再起動すると元に戻ります。
設定ファイルとしては/etc/hostname
があるのですが、ここが反映されません。
恒久的に変更する場合は、
# hostnamectl set-hostname --static ホスト名
で設定。これで/etc/hostname
にも反映されます。また、
HOSTNAME=ホスト名
と記載しても反映されます。クラウドでのオーダーなんかだとデフォでこのファイルに記載されている場合があります。まあどっちゃでもいいでしょう。
■基本IP設定
ファイル編集 ※RHEL7で確認
「NetworkManagerなんか必要ねぇんだよ!」て人もいると思うので、従来の方法も載せときます。
→RHEL9ベースでは非推奨なので注意。nmcli使ってください。
# ip a
でアドレスなどの確認。インストールすればifconfigも使えますが、慣れればこっちの方が楽ですし、nmcliコマンドのほうが詳細に表示できます。
/etc/sysconfig/network-scripts/ifcfg-eth0
を編集して設定。eth0は該当するデバイス名です。
NICが追加されるとそのデバイスの名前をつけた設定ファイルを作成しないといけません。そこは面倒ですね。
よくわからんパラメータが沢山ありますが、基本的に以下のパラメータがあれば大丈夫かなと。
DEVICE=eth0
ONBOOT=yes #OS起動時に有効化
TYPE=Ethernet
BOOTPROTO=none #直接IPを指定
IPADDR=192.168.1.100
PREFIX=24
NM_CONTROLLED=NO #NetworkManagerを使用しない
IPv6使わない場合は項目ごと削除で大丈夫です。
PREFIXの箇所は、
NETMASK=255.255.255.0
のように記述することもできます。
また、IPエイリアスを設定したい場合は
IPADDR1=192.168.1.111
PREFIX1=24
のように追記することで設定できます。
デフォルトゲートウェイの設定は
GATEWAY=192.168.1.1
DEFROUTE=yes
と追記することで設定はできるのですが、NICが複数あったりする場合は以下のファイル1つに記述しておく方がいいです。
GATEWAY=192.168.1.1
ファイル編集後、サービス再起動
# systemctl restart network
NetworkManager使用
サービス起動
# systemctl start NetworkManager
設定はnmcliコマンドか、TUI設定ツールのnmtuiを使う方法があります。
・nmcliコマンド
IFの確認
# nmcli
[root@host01 ~]# nmcli
ens160: 接続済み to ens160
"VMware VMXNET3 Ethernet Controller"
ethernet (vmxnet3), 00:50:56:8D:FF:13, hw, mtu 1500
ip4 デフォルト
inet4 192.168.1.100/24
inet6 fe80::250:56ff:fe8d:ff13/64
lo: 管理無し
"lo"
loopback (unknown), 00:00:00:00:00:00, sw, mtu 65536
既知のデバイスに関する情報を取得するには、"nmcli device show" を使用します。
アクティブな接続プロファイルの概要を取得するには、"nmcli connection show" を使用します。
使用方法の詳細情報については、nmcli(1) と nmcli-examples(5) の man ページを参照してください。
ご丁寧にオプションの説明書いてくれてる...
詳細確認したい場合は以下
# nmcli device show
# nmcli connection show
認識済のeth0のIP/GW設定
# nmcli c modify eth0 ipv4.addresses 192.168.1.100/24 ipv4.method manual ipv4.gateway 192.168.1.1
DNS参照先設定
# nmcli c modify eth0 ipv4.dns 192.168.1.10
connection状態更新
# nmcli connection reload
ここでの設定は
RHEL7では/etc/sysconfig/network-scripts/ifcfg-eth0
、
RHEL9では/etc/NetworkManager/system-connections(後述)
に反映されます。
・nmtuiで設定
nmtui起動
# nmtui
設定項目みながらポチポチして接続の編集やホスト名変更が可能です。
■Bonding設定
複数NICを使ってLAGのインターフェースを組む場合です。チーミングだのbondingだのLAGだの名称を統一してくれ(小声)
・bondingモジュールのインストール
ない場合はあまりないと思うが、なければインストール
# modprobe --first-time bonding
・bondingの種類
一応種類をまとめておきます。
mode=0 : balance-rr
⇒ラウンドロビンによる負荷分散。bondingを組んでいるすべてのインタフェースで受信。
mode=1 : active-backup
⇒active/backupの方式。activeポートが使用できなくなると、backupポートがactiveポートになる。
mode=2 : balance-xor
⇒送信元/宛先情報を元に負荷分散。情報はxmit_hash_policyによって設定。bondingを行っているすべてのインタフェースで受信。
mode=3 : broadcast
⇒すべてのインタフェースから同じパケットを送信。bondingを行っているすべてのインタフェースで受信。
mode=4 : 802.3ad
⇒LACP(Link Aggregation Control Protocol:リンクアグリゲーションの接続を確立させるプロトコル)を使用。情報はxmit_hash_policyによって設定可能。
送信元/宛先情報を元に負荷分散を行い、受信はLACPでネゴシエーションが取れたインタフェースで行う。=対向のSWでもLACPを有効にする必要がある。
mode=5 : balance-tlb
⇒スレーブインタフェースの負荷によって負荷分散され、送信。bondingを行っているすべてのインタフェースで受信。
mode=6 : balance-alb
⇒スレーブインタフェースの負荷によって負荷分散され、送信。受信は負荷に応じて変更。
・設定
コンフィグファイル編集 ※RHEL7
nmcliを推奨で、RHEL9ではできなくなっています。
スレーブはファイル名とDEVICEの値以外は両方同じ設定。↓
DEVICE=eth0(1)
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
NM_CONTROLLED=no
MASTER=bond0
SLAVE=yes
DEVICE=bond0
TYPE=Bond
BONDING_MASTER=yes
ONBOOT=yes
BOOTPROTO=none
NM_CONTROLLED=no
BONDING_OPTS="mode=1 miimon=100 primary=eth0 updelay=10000"
mode4なら、BONDING_OPTS="mode=4 lacp_rate=1"
。
ちなみにVLANを設定したい場合は、/etc/sysconfig/network
にVLAN=yes
を追記してVLANを有効化した上で、
ifcfg-XXXファイル名に.VLAN番号をつけて作成。(このファイルにVLAN=yesを入れてもよい。)↓
DEVICE=bond0.1111
TYPE=Bond
BONDING_MASTER=yes
ONBOOT=yes
BOOTPROTO=static
NM_CONTROLLED=no
IPADDR=10.11.0.2
PREFIX=24
IPV6INIT=no
VLAN=yes
nmcliコマンドで設定
bondインターフェース作成
# nmcli connection add type bond con-name bond0 ifname bond0 mode 802.3ad miimon 100 lacp-rate fast ipv4.method disabled ipv6.method ignore
※この物理IFを親にしてVLANIFをつけたい場合、methodをdisabled/ignore
を指定する必要がある。(dhcp等で自動でIPを取りに行ってしまうため)
bondIFへ物理IFを参加させる
# nmcli connection add type ethernet port-type bond con-name bond0-slave0 ifname eth0 master bond0
# nmcli connection add type ethernet port-type bond con-name bond0-slave1 ifname eth1 master bond0
(option)VLANインターフェース作成
VLANタグを設定したい場合
vlan.parent
パラメータが実際にどの物理 or bondIFにVLANを乗せるかを決める.
con-nameおよびifnameは慣習的にIF名.VLANID
# nmcli connection add type vlan con-name bond0.1000 ifname bond0.1000 vlan.parent bond0 id 1100
VLANIFにアドレス付与し、有効化
→ホストにアドレスが付与され、外部から接続可能。また、VLAN1000のタグ通信となる
# nmcli connection modify bond0.1000 ipv4.addresses 192.168.100.1/24 ipv4.method manual ipv4.gateway 192.168.100.254
# nmcli connection up bond0.1000
・確認
全体確認↓
# ip -d link show type bond
# nmcli c show
NAME UUID TYPE DEVICE
bond0.1000 03546718-01c0-4aaa-b6e7-99493a25b937 vlan bond0.1000
bond0 12cc0647-7f21-49f0-93b2-6575db5680fc bond bond0
bond0-slave0 442d2cf7-79d7-4ee6-bdf2-2f2c3f252c62 ethernet eth0
bond0-slave1 f7557663-9a3f-4d88-99f9-cb8a1b608c31 ethernet eth1
lo 934e6c01-31ee-4ec6-b5a4-6148543e3040 loopback lo
eth0 0cb0f677-f411-3e6b-885b-ed6ddc51ffc8 ethernet --
eth1 0655f372-afcd-3302-9d8d-f99cc59481ce ethernet --
# ls /proc/net/bonding/
bond0 bond1 bond2
IFの詳細確認
eth0と1でActive/Standby(mode1)でeth0をprimaryにしてbond0を組んでいる場合↓
[root@host01 ~]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth0
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 10000
Down Delay (ms): 0
Slave Interface: eth0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: 68:05:ca:e0:b4:1e
Slave queue ID: 0
Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 1
Permanent HW addr: 68:05:ca:e0:b4:1f
Slave queue ID: 0
[root@host01 ~]#
eth0と1でmode4でbond0を組んでいる場合↓
[root@host01 ~]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer2 (0)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
802.3ad info
LACP rate: fast
Min links: 0
Aggregator selection policy (ad_select): stable
System priority: 65535
System MAC address: b4:96:91:c1:XX:XX
Active Aggregator Info:
Aggregator ID: 9
Number of ports: 2
Actor Key: 21
Partner Key: 32769
Partner Mac Address: 00:23:04:ee:XX:XX
Slave Interface: eth0
MII Status: up
Speed: 25000 Mbps
Duplex: full
Link Failure Count: 88
Permanent HW addr: b4:96:91:c1:XX:XX
Slave queue ID: 0
Aggregator ID: 9
Actor Churn State: none
Partner Churn State: none
Actor Churned Count: 1
Partner Churned Count: 2
details actor lacp pdu:
system priority: 65535
system mac address: b4:96:91:c1:XX:XX
port key: 21
port priority: 255
port number: 1
port state: 63
details partner lacp pdu:
system priority: 8192
system mac address: 00:23:04:ee:XX:XX
oper key: 32769
port priority: 32768
port number: 257
port state: 63
Slave Interface: eth1
MII Status: up
Speed: 25000 Mbps
Duplex: full
Link Failure Count: 5
Permanent HW addr: b4:96:91:c1:XX:XX
Slave queue ID: 0
Aggregator ID: 9
Actor Churn State: none
Partner Churn State: none
Actor Churned Count: 0
Partner Churned Count: 0
details actor lacp pdu:
system priority: 65535
system mac address: b4:96:91:c1:XX:XX
port key: 21
port priority: 255
port number: 2
port state: 63
details partner lacp pdu:
system priority: 8192
system mac address: 00:23:04:ee:XX:XX
oper key: 32769
port priority: 32768
port number: 16641
port state: 63
[root@host01 ~]#
■Bridge設定
仮想ブリッジ ⇒ ホストLinux上に仮想的なL2スイッチを構成する機能
ホスト上の物理NICを仮想ブリッジに接続し、L2スイッチを経由してVMを外部ネットワークに接続できます。(VMには、外部ネットワークと同じサブネットのIPアドレスをアサインする)
通信フローとしては、
VMの仮想NIC ⇒ ホスト側のTAPデバイス ⇒ 仮想ブリッジ ⇒ ホスト側の物理NIC ⇒ 外部NW
同じ仮想ブリッジに接続されたVM同士は、仮想ブリッジを経由して通信することが可能。
・設定
コンフィグファイル編集 ※RHEL7
ホストサーバにもアドレスを振る場合はここ。↓
DEVICE=br2222
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.11.10.200
PREFIX=24
物理NICと仮想ブリッジを接続する。
bondingの場合、ブリッジファイルをここで指定↓
DEVICE=bond0.2222
TYPE=Bond
BONDING_MASTER=yes
ONBOOT=yes
BOOTPROTO=none
NM_CONTROLLED=no
IPV6INIT=no
BRIDGE=br2222
bondingでない場合はifcfg-ethXの物理IFのファイルでBRIDGE=brXXXX
を指定すればよい。
nmcliで設定
bridgeIF作成・有効化
# nmcli connection add type bridge con-name br0 ifname br0
既存のIFを作成したブリッジに接続する
ここではVLANIF(bond0.1000)を作成したbr0ブリッジに接続している
# nmcli connection modify bond0.1000 master br0
有効化
# nmcli connection up br0
ifnameは存在する接続したいIF,masterは作成したbridgeIFを指定する
・確認
$ brctl show
bridge name bridge id STP enabled interfaces
br0 8000.b026286cdb90 no bond0.1000
brctlコマンドがない場合は
# ip -d link show type bridge
(OMAKE)■nmcliコマンドリスト
サクッと設定したい時用のリスト
物理NICx2(eth0,eth1)
↓
bond0 ← trunk (VLAN 1101, 1102)
├─ bond0.1101 ← ホスト用、IPあり(192.168.110.10)
└─ bond0.1102 ← VM用、IPなし
↓
br0.1102 ← VMが接続
① bond0 の作成
# nmcli connection add type bond con-name bond0 ifname bond0 mode 802.3ad miimon 100 lacp-rate fast ipv4.method disabled ipv6.method ignore
# nmcli connection add type ethernet con-name bond0-slave1 ifname eth0 master bond0
# nmcli connection add type ethernet con-name bond0-slave2 ifname eth1 master bond0
#bondIF自体にアドレスを振らない場合、methodをv4:disabled/ignoreに指定
② VLAN 1101(ホスト用)を定義
vlan1101でホスト自体にSSHアクセスできるようにする
# nmcli connection add type vlan con-name bond0.1101 ifname bond0.1101 vlan.parent bond0 id 1101
# nmcli connection modify bond0.1101 ipv4.method manual ipv4.addresses 192.168.110.10/24
# nmcli connection modify bond0.1101 ipv6.method ignore
# nmcli connection up bond0.1101
③ VLAN 1102(VM用)を作成
VMがVLAN1102で通信する。ホスト自体は1102のアドレスは持たない。
# nmcli connection add type vlan con-name bond0.1102 ifname bond0.1102 vlan.parent bond0 id 1102
④ Bridge br0.1102 を作成して、bond0.1102 を 接続
# nmcli connection add type bridge con-name br0.1102 ifname br0.1102
# nmcli connection modify bond0.1102 master br0.1102
⑤ IFを起動
# nmcli connection up bond0.1102
# nmcli connection up br0.1102
(option) VM 側の接続(virt-manager/virt-install)
br0.1102をVMのNICにブリッジ接続
VM側のIPを設定
libvirt 用の virtual network を定義(任意)
確認
NAME UUID TYPE DEVICE
bond0 ... bond bond0
bond0-slave0 ... ethernet eth0
bond0-slave1 ... ethernet eth1
bond0.1101 ... vlan bond0.1101
bond0.1102 ... vlan bond0.1102
br0.1102 ... bridge br0.1102
virbr0 ... bridge virbr0
DEVICE TYPE STATE CONNECTION
eth0 ethernet 接続済み bond0-slave0
eth1 ethernet 接続済み bond0-slave1
bond0 bond 接続済み bond0
bond0.1101 vlan 接続済み bond0.1101
bond0.1102 vlan 接続済み bond0.1102
br0.1102 bridge 接続済み br0.1102
lo loopback 接続済み (外部) lo
virbr0 bridge 接続済み (外部) virbr0
また、NeworkManagerの設定が反映されるファイルは/etc/NetworkManager/system-connections
ディレクトリに各IFごとにファイルで分かれている
[connection]
id=bond0
uuid=12cc0647-7f21-49f0-93b2-6575db5680fc
type=bond
interface-name=bond0
[bond]
lacp_rate=fast
miimon=100
mode=802.3ad
[ipv4]
method=disabled
[ipv6]
addr-gen-mode=default
method=ignore
[proxy]
■静的経路の追加
# route add -net 192.168.99.0/24 gw 192.168.0.254 eth0
route add -net IPアドレス/サブネット gw 宛先ルータアドレス 発信するデバイス名
で一時的に追加できます。またip routeコマンドでも設定できますが、これらは再起動すると消えます。
恒久的に追加する場合は以下。ファイルで既に指定しているので、dev eth0は省略できます。
192.168.9.0/24 via 192.168.0.254 dev eth0
nmcliでのStaticRoute設定
# nmcli c modify eth0 ipv4.routes 192.168.122.0/24 10.10.10.1
ルーティングテーブル確認。
# ip route
■パケットキャプチャ
tcpdumpが入っていればパケットのキャプチャを取得できます。
# tcpdump -i eth1 port 53 -nn -s 0 -tttt
eth1インターフェースを通過するポート53のトラフィックをキャプチャし、その内容をタイムスタンプ付きで表示
■DNS設定
ifcfgファイルに記述することもできますが、/etc/resolv.conf
に記述するのが一般的です。
nameserver 10.70.71.107
nameserver 10.70.71.108
nmcliでの参照先設定
# nmcli c modify eth0 ipv4.dns 192.168.1.10
名前解決の確認
# nslookup
コマンドがない場合は、yumなどでbind-utils
をインストールするか、
dig
,host
コマンドでも名前解決を調べられます。
dig -b 192.168.0.1 @10.0.0.1 www.google.co.jp +tries=1
192.168.0.1を送信元として、DNSのクエリを10.0.0.1のDNSサーバーに送信し、www.google.co.jpドメインのIPアドレスを取得しようとする。
+tries=1のオプションでDNSサーバーへのクエリ再試行の回数を1回のみの試行でドメインのIPアドレスを取得します。
参照先のDNSサーバを指定し、アドレスだけ返して欲しい場合は以下
# dig +short @参照先DNSサーバIP XXX.com
v6で確認したい場合は以下
# dig +short AAAA XXX.com
■CONNECTION状態
必須級。
# netstat -nplt
-n
: IPアドレスとポート番号を数値形式で表示。DNSの逆引きなどは行われず、IPアドレスとポート番号をそのまま表示。
-p
: 各接続やソケットに紐付いているプログラム名(プロセス名)を表示。ポート番号とプロトコルの組み合わせをプロセスにマッピングするために使用。
-l
: リスニング(Listen)状態のソケットや接続を表示。つまりローカルマシンが他のマシンからの接続を受け入れるために待機しているポート。
-t
: TCP接続を表示
-u
: UDP接続を表示
後継としてssコマンドもある。
# ss -antp
-a
:LISTEN,NOLISTEN両方の情報を表示。-lでListenのみ
-n
:アドレスやポートを数値で表示
-t
:TCP接続を表示
-u
:UDP接続をhy
-p
:プロセス名を表示
ポートの確認であれば、ncコマンドも便利
# nc -vz 127.0.0.1 80
-v
は詳細、-z
はデータを対象ポートに送信しない
■HTTPS通信確認
# openssl s_client -connect xxxx.com:443
openssl s_client
: OpenSSLコマンドでSSL/TLSクライアントを起動
-connect xxxx.com:443
: 接続先のホスト名とポート番号を指定
このコマンドを実行すると、指定されたホストとポート上のサーバーに対してSSL/TLS接続が試みられる。
接続が成功すると、サーバーの証明書情報や使用されるSSL/TLSバージョンなどの詳細な情報が表示される。
ちなみに証明書ファイルの内容を表示したい場合は以下
# openssl x509 -in xxxx.crt -text -noout
■cURL確認
# curl "http://xxxx.com/zzz"
-L
:リダイレクトがあればリダイレクト先の情報を取得
-s
:進捗状況を非表示。-sSとすることが多い
-S
:エラーは表示。-sSとすることが多い
-v
:詳細ログを出力
-I
:HTTPレスポンスヘッダを取得
-k
:SSL接続で証明書エラーをスキップ
-O
:ダウンロード
# curl --max-time 3 -o /dev/null -s -w "%{http_code}\n" https://www.yahoo.co.jp
HTTPステータスコードのみ返してくれる。200 = 成功
# curl ifconfig.me
使用しているグローバルアドレスを確認できるコマンド