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


3

自分のコンピューターの1つにルートを設定する必要があります。恒久的に欲しいので、リブートするたびに自分でコマンドを入力する必要はありません。

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

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

だから私はGoogleが私に言う通常の方法を使えないと思う。

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

回答:


1

今学期、学校の研究室で似たようなことをしなければなりませんでした。スクリプトを使用して、作成するエイリアスの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または別の方法を使用して、起動時にスクリプトを実行します。

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


こんにちは; スクリプトについては称賛を送ります。ただし、このコンピューターがこのスクリプトを実行するとサーバーとして機能するため、副作用がないことを確認したいと思います。この種のルーティングに問題がないことを確認したら、この質問に回答済みとマークします。
Tiana987642

それがあなたのために働くことを保証することはできませんが、それは私のために働いた。3台の異なるマシンでスクリプトを実行しましたが、すべてのマシンで動作しました。テストすることをお勧めします。TARGET_IP =の変更が必要な場合もあります。{IP_ADDRESS}およびrouteコマンドの場合もあります。しかし、試してみてください、それは動作するはずです。
canadmos

まあ、それがあなたとうまくいくなら、それは私のためにうまくいくはずです。ありがとうございました!
Tiana987642

if-up.dスクリプトに引数として渡されるインターフェイスの名前。したがって、次のように書くことができます。case eth0の「$ IFACE」)esac
ロマンスクリャロフ

1

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/network@.service

  [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 network@eth0.service
  systemctl start network@eth0.service

OpenSUSE 12.1 32ビットを使用します。なんて残念なことでしょう、これはいいアプローチだと思います。ありがとうございました!
Tiana987642

@ Tiana987642 systemdディストリビューションではさらに簡単です。
MariusMatutiae

ここに書き留めていただけますか?それは私または他の誰かのために役立ちます:)
Tiana987642

@ Tiana987642完了。
MariusMatutiae
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.