🙆

【FreeBSD + NAT】jail からの外部通信を可能にする

2023/08/10に公開

やりたいこと

ipfw の NAT 機能を使用して、jail から外部への通信を可能にしたい。

/etc/rc.conf に以下を追記

gateway_enable="YES"
firewall_enable="YES"
firewall_type="OPEN"
firewall_nat_enable="YES"
firewall_nat_interface="em0"
firewall_nat_flags="unreg_only"

/etc/natd.conf は以下の通り

deny_incoming no
use_sockets yes
same_ports yes
unregistered_only yes
dynamic yes

マシンを再起動(/etc/netstart でもいいと思うけど、私の場合はうまくいかなかったので再起動しました)

shutdown -r now

再起動後に ipfw は自動で起動するはずです。

[root@vitothon /jails/bin/test]# service ipfw status
ipfw is enabled
[root@vitothon /jails/bin/test]# ipfw -a list
00050   6   504 nat 123 ip4 from any to any via em0
00100   0     0 allow ip from any to any via lo0
00200   0     0 deny ip from any to 127.0.0.0/8
00300   0     0 deny ip from 127.0.0.0/8 to any
00400   0     0 deny ip from any to ::1
00500   0     0 deny ip from ::1 to any
00600   0     0 allow ipv6-icmp from :: to ff02::/16
00700   0     0 allow ipv6-icmp from fe80::/10 to fe80::/10
00800   0     0 allow ipv6-icmp from fe80::/10 to ff02::/16
00900   0     0 allow ipv6-icmp from any to any icmp6types 1
01000   0     0 allow ipv6-icmp from any to any icmp6types 2,135,136
65000 258 21580 allow ip from any to any
65535   0     0 deny ip from any to any

あとは、jail のデフォルトルートとしてホストマシンを指定してあげれば OK です。

[root@vitothon /jails/bin/test]# jexec rip01 /bin/sh
# route add default 192.168.100.254
# netstat -nr
Routing tables

Internet:
Destination        Gateway            Flags     Netif Expire
default            192.168.100.254    UG1     epair1a
...
# ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8): 56 data bytes
64 bytes from 8.8.8.8: icmp_seq=0 ttl=61 time=39.932 ms
64 bytes from 8.8.8.8: icmp_seq=1 ttl=61 time=65.492 ms
^C

Discussion