ルーター用のカーネルをコンパイル中です。既存のLinuxシステムでIP転送を有効にする方法を知っています。コンパイル時にCONFIG_IP_FORWARD
同じことをします。
GTKベースのカーネル設定ツール()を使用してバニラカーネルのバージョン3.12.14を設定していますgconfig
。ただし、このオプションはどこにも表示されません。最近のカーネルに代替設定オプションがありますか、それとも何かが欠けていますか?
答え1
CONFIG_IP_FORWARDING
このオプションは、Linuxカーネルのソースコードがリリースされてから使用できません。2.0.xカーネルシリーズ。私が知る限り、ビルドされたカーネルに対してデフォルトでIP転送を有効にするコンパイル時オプションはもうありません。
2.1.x シリーズから IPv4 IP 転送を有効にする正しい方法は、次の方法を使用することです。net.ipv4.ip_forward
sysctl
オプション。
次の行を に追加するか、sysctl.conf
にファイルとして追加します/etc/sysctl.d
。
net.ipv4.ip_forward = 1
その後、sysctl
構成を再ロードします。
sysctl -p /etc/sysctl.conf
つまり、何らかの理由で/proc
起動時にsysctlオプション(またはそれに対応するオプション)を設定する必要がないようにカーネルを設定する必要がある場合は、sysctl
カーネルソースツリー*でそのオプションのデフォルト値を直接変更できます。
これシステム制御テーブルエントリは、/proc/sys/net/ipv4/ip_forward
次に定義される静的構造で初期化されますnet/ipv4/devinet.c
。
static struct ctl_table ctl_forward_entry[] = {
{
.procname = "ip_forward",
.data = &ipv4_devconf.data[
IPV4_DEVCONF_FORWARDING - 1],
.maxlen = sizeof(int),
.mode = 0644,
.proc_handler = devinet_sysctl_forward,
.extra1 = &ipv4_devconf,
.extra2 = &init_net,
},
{ },
};
このフィールドは、静的構造のフィールドである整数配列data
の項目を指すように初期化されます。項目は で定義された列挙値で 。この構造に含まれる配列は項目が省略され、部分的にのみ初期化されます。構造には静的リポジトリがあるため、すべての整数型メンバーはゼロに初期化されます。したがって、データフィールドを設定するにはdata
ipv4_devconf
IPV4_DEVCONF_FORWARDING
include/uapi/linux/ip.h
data
IPV4_DEVCONF_FORWARDING
ip_forward
システム制御テーブル項目だけでなく、レコードのデフォルト値も構造内の対応するipv4_devconf.data[IPV4_DEVCONF_FORWARD - 1]
フィールドを初期化して初期化する必要があります。これは次のパッチで達成できます。ipv4_devconf_dflt
1
diff --git a/net/ipv4/devinet.c b/net/ipv4/devinet.c
index bdbf68b..91fe073 100644
--- a/net/ipv4/devinet.c
+++ b/net/ipv4/devinet.c
@@ -69,6 +69,7 @@
static struct ipv4_devconf ipv4_devconf = {
.data = {
+ [IPV4_DEVCONF_FORWARDING - 1] = 1,
[IPV4_DEVCONF_ACCEPT_REDIRECTS - 1] = 1,
[IPV4_DEVCONF_SEND_REDIRECTS - 1] = 1,
[IPV4_DEVCONF_SECURE_REDIRECTS - 1] = 1,
@@ -80,6 +81,7 @@ static struct ipv4_devconf ipv4_devconf = {
static struct ipv4_devconf ipv4_devconf_dflt = {
.data = {
+ [IPV4_DEVCONF_FORWARDING - 1] = 1,
[IPV4_DEVCONF_ACCEPT_REDIRECTS - 1] = 1,
[IPV4_DEVCONF_SEND_REDIRECTS - 1] = 1,
[IPV4_DEVCONF_SECURE_REDIRECTS - 1] = 1,
*婦人声明:私はLinuxネットワーキングの内部の専門家ではないので、ここで説明されている方法は配信を有効にして、通常devinet_sysctl_forward()
行われている初期化の一部を見逃す可能性があるのでsysctl
注意してください。上記のパッチはカーネルバージョン3.14用であるように見え、実際に/proc/sys/net/ipv4/ip_forward
はsysctl
。システム制御項目の初期化。このパッチが役に立つという希望で含めましたが、いかなる保証もありません。
答え2
私はそれを静的に有効にするソリューションを知りません(少なくとも最近のカーネルではありません。ソースコードを編集したCONFIG_IP_FORWARD
だけです)。grep
多くの場合、転送を有効にする前に他のエントリ(フィルタリングルール、QoSルール、[より正確な]ルーティングルール)を設定できるため、これはセキュリティの観点から良い考えではないようです。
答え3
IP 転送は Linux ネットワーキング コードの重要な機能です。そのため、構成変数はありません。