2
7

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】NW確認・変更コマンド【RHEL】

Last updated at Posted at 2020-07-17

せんとくん

20180516182359.jpg
やら赤帽少年のネットワーク関連の設定・確認方法です。

バージョン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にも反映されます。また、

/etc/sysconfig/network
HOSTNAME=ホスト名

と記載しても反映されます。クラウドでのオーダーなんかだとデフォでこのファイルに記載されている場合があります。まあどっちゃでもいいでしょう。

■基本IP設定

ファイル編集 ※RHEL7で確認

「NetworkManagerなんか必要ねぇんだよ!」て人もいると思うので、従来の方法も載せときます。
→RHEL9ベースでは非推奨なので注意。nmcli使ってください。

# ip a

でアドレスなどの確認。インストールすればifconfigも使えますが、慣れればこっちの方が楽ですし、nmcliコマンドのほうが詳細に表示できます。

/etc/sysconfig/network-scripts/ifcfg-eth0
を編集して設定。eth0は該当するデバイス名です。
NICが追加されるとそのデバイスの名前をつけた設定ファイルを作成しないといけません。そこは面倒ですね。
よくわからんパラメータが沢山ありますが、基本的に以下のパラメータがあれば大丈夫かなと。 

/etc/sysconfig/network-scripts/ifcfg-eth0
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つに記述しておく方がいいです。

/etc/sysconfig/network
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

設定項目みながらポチポチして接続の編集やホスト名変更が可能です。
20180516182549.jpg

■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の値以外は両方同じ設定。↓

/etc/sysconfig/network-scripts/ifcfg-eth0,eth1
DEVICE=eth0(1)
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=none
NM_CONTROLLED=no
MASTER=bond0
SLAVE=yes
/etc/sysconfig/network-scripts/ifcfg-bond0
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/networkVLAN=yesを追記してVLANを有効化した上で、
ifcfg-XXXファイル名に.VLAN番号をつけて作成。(このファイルにVLAN=yesを入れてもよい。)↓

/etc/sysconfig/network-scripts/ifcfg-bond0.1111
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を組んでいる場合↓

/proc/net/bonding/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を組んでいる場合↓

/proc/net/bonding/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

ホストサーバにもアドレスを振る場合はここ。↓

/etc/sysconfig/network-scripts/ifcfg-br2222
DEVICE=br2222
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=static
IPADDR=10.11.10.200
PREFIX=24

物理NICと仮想ブリッジを接続する。
bondingの場合、ブリッジファイルをここで指定↓

/etc/sysconfig/network-scripts/ifcfg-bond0.2222
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 を定義(任意)

確認

nmcli connection show
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
nmcli device status
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ごとにファイルで分かれている

/etc/NetworkManager/system-connections/bond0.nmconnection
[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は省略できます。

/etc/sysconfig/network-scripts/route-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に記述するのが一般的です。

/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

使用しているグローバルアドレスを確認できるコマンド

2
7
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
2
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?