PPPoEのADSLモデムの場合ブリッジモードかルーターモードが有ります。
光モデムの場合はブリッジモードしかありません。
ルーターモードの場合はPPPoAと同じ設定になりますのでここではブリッジモードでFreeBSDマシンがPPPoEログインする
設定を説明します。ADSLモデムをルーターとして使うといろいろ不具合が多いのでPPPoEの方はブリッジモードでの使用をお薦めします。
ADSLモデムの設定はブリッジモードにするだけで他には特に何も有りません。
WAN側インターフェース名:xl0
LAN側インターフェース名:fxp0
Kernelの編集をする(ファイル名は既にMYKERNとして話を進めます)
/usr/src/sys/amd64/conf/MYKERN を編集する
ident MYKERN #変更−ファイル名に合わせる device tun #有効になっているのを確認 device bpf ##有効になっているのを確認.DHCPを使わない場合コメントアウトするのがセキュリティー的にいいらしい options NETGRAPH #追加−PPP接続に必要 options NETGRAPH_ETHER #追加−PPP接続に必要(一応なくても動く) options NETGRAPH_PPPOE #追加−PPP接続に必要(一応なくても動く) options NETGRAPH_SOCKET #追加−PPP接続に必要(一応なくても動く) options NETGRAPH_EIFACE #追加−なんだか分からない options NETGRAPH_BRIDGE #追加−なんだか分からない options IPFILTER #追加−IPFILTERに必要 options IPFILTER_LOOKUP #追加−なんだか分からない options IPFILTER_DEFAULT_BLOCK #追加−IPFILTERのデフォルト設定でパケットをブロック
/etc/rc.conf を編集する注意としてPPPOEの場合はIPFのほうがtun0にIPが割り当てられるより前に動作してしまう為、別のシェルスクリプトでもう一度ipfとipfnatを動作させる必要がある。ipfstart.shとして後述参照。
gateway_enable="YES" #NIC間にパケットを通す ifconfig_xl0="UP" #WAN側は設定せずアクティブにする ifconfig_fxp0="inet 192.168.1.1 netmask 255.255.255.0" #LAN側設定(固定) ppp_enable="YES" #PPPoEを使う ppp_mode="ddial" #ddialモードで接続する ppp_profile="dion" #接続プロバイダ名(ppp.conf内で記述するもの) ppp_nat="NO" #PPPoEのNAT機能の停止(IPFilterを使用するため) portmap_enable="NO" #PORTMAP tcp_restrict_rst="YES" tcp_drop_synfin="YES" ipfilter_enable="YES" #IPFILTERを有効にする ipfilter_rules="/etc/ipf.rules" #ルールファイルを指定(設定は項目6で説明) ipfilter_flags="" #特にオプションの指定はしない ipmon_enable="YES" #IPMON(IP MONITOR)を有効にする ipmon_flags="-D /var/log/ipflog" #IPMONをデーモンとして起動し、/var/log/ipflogにフィルター結果を書き出す ipnat_enable="YES" #NATの設定これがないとマスカレードしません ipnat_rules="/etc/ipnat.rules" #NATのルールを読み込む(設定は項目6で説明)
またデフォルトルーターは記載しない事。
/etc/ppp/ppp.conf を編集する``:'' で終る行は 1 カラム目から始め, その他の行はスペースまたはタブで以下の例のように段をつける (インデントする) 必要があることに注意してください。
default: set device PPPoE:xl0 #WAN側のtun0デバイスに割り当てるIFカードを指定 set MRU 1454 #BLACKHALL問題の回避の為MRUとMTUの値を調整 set MTU 1454 set log Phase Chat LCP IPCP CCP tun command set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0 set ctsrts off add default HISADDR # Add a (sticky) default route accept CHAP #PAPの場合はCHAPをPAPにする enable dns # request DNS info (for resolv.conf) #ログインすると自動的にresolv.confが書き換えられてしまうので自前DNSは無しが良い dion: set authname **********@bda.dion.ne.jp #プロバイダからのID set authkey ******* #プロバイダからのパスワード add default HISADDR set server /var/run/dion "" 0177
ipfstart.shとして/usr/local/etc/rc.d/以下に作成。作成後はchmod 755 ipfstart.shで起動属性にしておく。
#!/bin/sh
ipf -Fa -Z -f /etc/ipf.rules
case $1 in
'start' )
if [ -r /etc/ipnat.rules ] ; then
/sbin/ipnat -f /etc/ipnat.rules
fi
;;
'stop' )
/sbin/ipnat -C
;;
* )
echo "usage : ipfstart.sh {start|stop}"
;;
esac
/etc/hosts を編集する
::1 localhost
127.0.0.1 localhost #ドメイン名も入れるとなお良い
192.168.1.1 server #BSDマシン
/etc/resolv.conf を編集する
nameserver 202.238.**.** #DNSサーバーのIPアドレス、PPPログイン時に取得する場合は入力しないと思います
domain hogehoge.org #ローカル内のドメイン名
クライアントに接続するマシンのネットワーク設定も必要になります。
後半にDHCPサーバーの設定が有りますので、そちらをデーモンで走らせればこの項目を設定する必要はありません。
・IPアドレスとマシン名
上記hostsファイルに設定したようにクライアントマシンも設定する
・DNS
上記resolv.confと同じプロバイダーのDNS番号を入力する
・デフォルトゲートウェイ
192.168.1.1(BSDマシンのLAN側IPアドレスを入力)
・サブネットマスク
255.255.255.0
rc.confでLAN側の設定をしたマスクと同じにする
以上で設定は終了です。
これで立ち上げ直せばfreeBSDからインターネットへの接続と、クライアントマシン−freeBSD間のネットワークは動作しますが
まだ、クライアントマシンがインターネットには接続出来ません。次のfirewallでNAT機能を動かしますのでそこまで設定してから
インターネットに接続しましょう。
設定が間違えていなければコマンドラインで以下を入力する事でネットワークの設定がどうなっているかわかります。
ポイントは「tun0」にIPアドレスが割り当てられていれば成功です。
$ ifconfig
xl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=3<rxcsum,txcsum>
ether 00:e0:18:01:3d:39
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
fxp0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
inet 192.168.1.1 netmask 0xffffff00 broadcast 192.168.1.255
ether 00:d0:b7:1b:52:39
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
inet 127.0.0.1 netmask 0xff000000
ppp0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500
tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1454
inet 218.219.224.76 --> 61.125.204.5 netmask 0xffffff00
Opened by PID 65
$
どこかで間違いなどが有るとつながりませんが、ルート権限でコマンドラインにてと打ち込めばログイン作業が走りますので、設定ファイルを直した後、試すといいでしょう。
# /usr/sbin/ppp -quiet -ddial プロバイダー名
立ち上げと同じスタートであれば
でも接続できます。
# /etc/rc.d/ppp start
切断はと打ち込めば切断されるはずです。
# /usr/sbin/pppctl /var/run/dion close
もしくはrc.confの設定通りであれば
で切断できます。
# /etc/rc.d/ppp stop
カーネルに間違いが有る場合は、再起動が必要ですが...
設定が間違えていなければコマンドラインで以下を入力する事でネットワークの設定がどうなっているかわかります。
またルートの確認方法で
のようにdefaultがtun0になっていればデフォルトルーターの設定は正しいことが分かる。
$ netstat -r
Routing tables
Internet:
Destination Gateway Flags Netif Expire
default **** US tun0
localhost link#3 UH lo0
192.168.1.0/24 link#2 U em0
server link#2 UHS lo0
・・・
ipnatが機能しない場合があります。
# /etc/rc.d/ipnat start
70:ioctl(SIOCGNATS) object size mismatch for copying out ipfobj
Installing NAT rules.
FreeBSDのバージョンにもよるのですが、IPSECやIPV6を入れると良かったり、無い方が良かったりと良く分かりません。
IPV6やIPSECなどを無くす場合(11.1は無い方が動きました)
/usr/src/sys/amd64/conf/MYKERN
makeoptions MKMODULESENV+="WITHOUT_INET6_SUPPORT="
nooptions INET6
#options INET6
#options IPSEC
/etc/make.confこの状態でipfをコンパイルするとINET6無しで動くと思われます。
NOINET6="YES"
NO_INET6="YES"
WITHOUT_INET6="YES"
# ここから下はついで
NOBLUETOOTH="YES"
NO_BLUETOOTH="YES"
WITHOUT_BLUETOOTH="YES"
NOWIRELESS="YES"
NO_WIRELESS="YES"
WITHOUT_WIRELESS="YES"
# cd /usr/src/sbin/ipf && make obj && make buildincludes && make && make install
逆はINET6などを有効にしてmake.confからも削除します。
FreeBSD11.3は全て有効にしないとipnatは動きませんでした。
FreeBSD13.0では上記カーネル構築とmake.conf編集後にipf再コンパイルでipnatは動きました。