wiki:Linux/Network

ネットワーク設定メモ

最近の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

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

# ip link add vxlan0 type vxlan id 2 remote 192.168.200.2 local 192.168.200.1 dev eno1 dstport 4789 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

udpcsum,options:csumはRHEL7.2/CentOS7.2から正しく動作する。

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

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

プロキシサーバの作り方

オフィス内のプロキシサーバに接続する多段プロキシサーバの作り方。

特定の端末しかプロキシサーバに接続できない場合、下記のようにプロキシに接続できる端末(My Proxy Server)上にプロキシサーバを立てて、オフィスのプロキシサーバに接続するようにすると、多段構成が取れる。

端末 - [My Proxy Server] = [Company Proxy Server]

mod_proxy、mod_proxy_http、mod_proxy_connectモジュールを有効にして、下記のような設定ファイルを、 /etc/apache2/site-enabled/proxy.confなどに作成する。

Listen 8080
NameVirtualHost *:8080

<VirtualHost *:8080>
ProxyRequests on
ProxyVia on
ProxyRemote http http://company.proxy.server:8080/
</VirtualHost>

これで、http://myproxy:8080/をプロキシサーバに設定すれば、オフィスのプロキシサーバを経由して通信できるようになる。

nf_conntrac_maxの変更

iptablesを利用していて、ネットワークトラフィックが膨大になったとき(ex.ホスト内のVM間通信など)、 トラッキング情報が追加できなくなるとパケットをドロップしてしまう。

/etc/sysctl.conf

net.nf_conntrack_max = 1000000

と、トラッキング数を増やし、

/etc/sysconfig/iptables-configを下記のように変更する。

#IPTABLES_SYSCTL_LOAD_LIST=".nf_conntrack .bridge-nf"
↓
IPTABLES_SYSCTL_LOAD_LIST=".nf_conntrack .bridge-nf"

上記設定を行わないと、OS起動時にnf_conntrackのカーネルモジュールを読み込む前に、 sysctlでパラメータを設定するため、設定に失敗するので、注意。設定を反映するには、

# systemctl restart iptables

とする。

firewalldのデバッグ

ファイアウォールのせいで通信がうまくいっていない場合、どのポートを空ければよいか確認よい。 下記のコマンドでリジェクトされた通信を洗い出して必要なポートを空ければよい。

# firewall-cmd --set-log-denied=all