wiki:Linux/Network

Version 13 (modified by yuna, 8 years ago) (diff)

--

ネットワーク設定メモ

最近のLinuxは、Network Managerなどで自動的に無線LANを探してくれたりして便利になっているのはよいが、特殊な環境だと毎回設定する必要があったり、正直うざいときがある。そこで、手動で設定してみよう。

設定

/etc/network/interfacesファイルに次のように設定を行う。

auto eth1
iface eth1 inet static
        wireless-essid [SSID]
        wireless-key [WEPキー]
        wireless-mode ad-hoc     (アクセスポイントを利用する場合はmanagedに)
        address 192.168.2.11
        netmask 255.255.255.0
        gateway 192.168.2.1

これで、

# ifup eth1

で無線LANが接続できる。無線LANのインタフェースかどうかは、iwconfigで確認できる。

特定のTCPポートを利用しているプロセスを発見する

Windowsの場合、

$ netstat -oan

Linuxの場合

$ netstat -tanp

オーバレイネットワーク

ネットワークの上にネットワークを作るオーバレイネットワークの作り方です。

ホスト1(192.168.200.1)とホスト2(192.168.200.2)がインタフェースeno1で繋がっている例です。

VXLAN

[192.168.200.1]# ip link add vxlan0 type vxlan id 2 remote 192.168.200.2 local 192.168.200.1 dev eno1 dstport 4789
[192.168.200.2]# ip link add vxlan0 type vxlan id 2 remote 192.168.200.1 local 192.168.200.2 dev eno1 dstport 4789

GRE

[192.168.200.1]# ip tunnel add gre0 mode gre remote 192.168.200.2 local 192.168.200.1 dev eno1
[192.168.200.2]# ip tunnel add gre0 mode gre remote 192.168.200.1 local 192.168.200.2 dev eno1

VLAN

[192.168.200.1]# ip link add link eno1 name eno1.2 type vlan id 2
[192.168.200.2]# ip link add link eno1 name eno1.2 type vlan id 2

動作確認は、次のような感じで実行。

[192.168.200.1]# ip addr add 192.168.128.1/24 broadcast 192.168.128.255 dev vxlan0 id 200
[192.168.200.1]# ip link set dev vxlan0 up

[192.168.200.2]# ip addr add 192.168.128.2/24 broadcast 192.168.128.255 dev vxlan0 id 200
[192.168.200.2]# ip link set dev vxlan0 up
[192.168.200.2]# ping 192.168.128.1

ただし、上記の設定では、RHEL7.1/CentOS7.1ではパケットのフラグメントが発生し、著しい性能低下が発生する。原因は、カプセル化されたIPヘッダの中にチェックサムが空のため、受け側のNICでGROが効かず細切れになったパケットが直接アプリケーション側まで届くためである。udpcsumオプションを付けると、送信パケットのすべてのヘッダにチェックサムが入るようになり、受信側のNICでGROされるため性能が劇的に向上する。ただし、最新のiprouteを利用する必要がある(RHEL7.1同梱のiprouteではudpcsumに対応していないので注意。CentOS7/RHEL7用の最新パッケージはここ:  https://github.com/okamototk/el-repo )。

# ip addr add 192.168.128.1/24 broadcast 192.168.128.255 dev vxlan0 id 200 udpcsum

Open vSwitchを利用する場合は、options:csum=trueを利用する。Open vSwitchのcsumオプションは、CentOS7.2以降で利用できる。

# ovs-vsctl add-port vxlanbr vxlan0 -- set interface vxlan0 type=vxlan options:key=128 options:remote_ip=192.168.100.2 options:csum=true

Open vSwitch

openvswitchパッケージをインストールする。CentOSでは、openvswitchのパッケージはないので、RDOのパッケージ

を利用する。

# rpm -Uvh https://repos.fedorapeople.org/repos/openstack/openstack-kilo/rdo-release-kilo-1.noarch.rpm
# yum install openvswitch
# systemctl enable openvswitch
# systemctl start openvswitch

ホスト1(IP192.168.100.1),2(192.168.100.2)で次のように実行。greのremote_ipには対抗ノードのIPを設定する。

### ホスト1(192.168.100.1)

# ovs-vsctl add-br brgre
# ovs-vsctl add-port brgre gre -- set interface gre type=gre options:remote_ip=192.168.100.2
# ip link set brgre up
# ip addr add 192.168.200.1/24 dev brgre

ホスト2 (192.168.100.2)

# ovs-vsctl add-br brgre
# ovs-vsctl add-port brgre gre -- set interface gre type=gre options:remote_ip=192.168.100.1
# ip link set brgre up
# ip addr add 192.168.200.2/24 dev brgre

pingで192.168.200.xを利用して疎通が確認できる。firewalldが動作していると、firewalldにブロックされて通信できないことがある。その場合、firewalldサービスを停止するか、次のようにして、greをfirewalldで許可する。

# firewall-cmd --direct --add-rule ipv4 filter INPUT 0 -p gre -j ACCEPT 
# firewall-cmd --direct --add-rule ipv6 filter INPUT 0 -p gre -j ACCEPT 
# firewall-cmd --reload

TNI

Tenant Network Identifierを割り振って仮想ネットワークを作成する場合は、keyオプションを利用する.例えば、TNIを1100に設定した仮想ネットワークを作成するには、次のようにする。

# ovs-vsctl add-port brgre gre -- set interface gre type=gre options:remote_ip=192.168.100.2 options:key=1100

ブリッジの利用

ip tunnelを利用すると、トンネルのインタフェースを直接作成する例だが、ブリッジを利用する場合は、次のようにtapを作成する.

# ip link add gre-tun type gretap remote 192.168.100.2 key 100
# brctl addbr br-gre
# brctl addif br-gre gre-tun