web-dev-qa-db-ja.com

起動スクリプトを介して特定のルートを追加する

コンピューターの1つにルートを設定する必要があります。永続的に必要なので、再起動するたびに自分でコマンドを入力する必要はありません。

ただし、同じ物理インターフェイスで2つのインターフェイス(イーサネットカードのeth0eth0:B)を使用しているため、使用するrouteコマンドは通常のコマンドではありません。

route add -net 10.1.0.0/16 dev eth0:B 192.168.1.1

だから私は グーグルが私に言う通常の方法 を使うことができないと思います。

私の質問は、スクリプトを作成して、$HOME/.kde4/Autostartを変更する代わりに/etc/sysconfig/network/routesに追加した場合、副作用はありますか?これを行うためのより良い方法はありますか?

3
Tiana987642

私はこの過去の学期に学校の研究室で同様のことをしなければなりませんでした。スクリプトを使用して、作成するエイリアスに必要なIPを持つインターフェイスを決定し、そのインターフェイスを使用してエイリアスを作成しました。その後、ルートを設定します。

何かのようなもの:


#! /bin/bash

# First get all the NIC device names on the system
dev_names=$(/sbin/ifconfig | grep HWaddr| awk '{print $1}')

# Set a loop to loop through each device name
#
my_dev=
TARGET_IP=192.168.1

for d_name in ${dev_names}
do

echo "Checking device name $d_name ..."

status=$(/sbin/ifconfig $d_name|grep ${TARGET_IP})

if [ ! -z "$status" ]
then
        echo "$d_name contains the target IP $TARGET_IP"
        my_dev=$d_name
fi
done
echo "The target NIC device name should be $my_dev"

# Now set the alias
/sbin/ifconfig $my_dev:B {IP_ADDRESS}

# Now add the route
route add -net 10.1.0.0/16 dev eth0:B 192.168.1.1

Crontabまたは別の方法を使用して、起動時にスクリプトを実行します。

注:インターフェースがワイヤレス接続の場合、これは機能しません。

1
canadmos

Systemdディストリビューション(= Arch Linux、OpenSUSE、Fedora)を使用していない場合は、/ etc/network/interfacesファイル内で実行できます。ここでは、vifsをセットアップしていると思います。

インターフェイスeth0:Bのスタンザに次の2行を追加するだけです。

 post-up route add -net route add -net 10.1.0.0/16 gw 192.168.1.1 dev eth0:B 
 pre-down route delete -net route add -net 10.1.0.0/16 gw 192.168.1.1 dev eth0:B 

これにより、ネットワークを開始するたびに自動的に実行され(起動時または手動で実行されます)、eth0:Bをオフにするとルートが切断されます。

編集:

@ Tiana987642のリクエストで、systemdディストリビューションでこれを行う方法を示します。これを起動時に動作させたいので、 Wiki に従い、systemdによって実行されるサービスを定義することもできます。 Wikiの変更はできるだけ少なくします。

/etc/conf.d/network@eth0

  address1=192.168.0.15
  netmask1=24
  broadcast1=192.168.0.255
  gateway1=192.168.0.1
  address2=10.0.0.17
  netmask2=24
  broadcast2=10.0.0.255
  gateway2=10.0.0.1

2つのインターフェースのこれらの構成は純粋に推測であり、独自の構成に置き換える必要があります。そして今/etc/systemd/system/[email protected]

  [Unit]
  Description=Network connectivity (%i)
  Wants=network.target
  Before=network.target
  BindsTo=sys-subsystem-net-devices-%i.device
  After=sys-subsystem-net-devices-%i.device

  [Service]
  Type=oneshot
  RemainAfterExit=yes
  EnvironmentFile=/etc/conf.d/network@%i

  ExecStart=/usr/bin/ip link set dev %i up
  ExecStart=/usr/bin/ip addr add ${address1}/${netmask1} broadcast ${broadcast1} dev %i
  ExecStart=/usr/bin/ip route add default via ${gateway1}

  ExecStart=/usr/bin/ip link add link $i name $i:B type vlan id 10

  ExecStart=/usr/bin/ip link set dev %i:B up
  ExecStart=/usr/bin/ip addr add ${address2}/${netmask2} broadcast ${broadcast2} dev %i:B
  ExecStart=/usr/bin/ip route add default via ${gateway2}

  ExecStop=/usr/bin/ip addr flush dev %i
  ExecStop=/usr/bin/ip link set dev %i down
  ExecStop=/usr/bin/ip addr flush dev %i:B
  ExecStop=/usr/bin/ip link set dev %i:B down

  [Install]
  WantedBy=multi-user.target

いつものようにサービスを有効にして開始します。

  systemctl enable [email protected]
  systemctl start [email protected]
1
MariusMatutiae