Freebsd의 두 번째 iface로 VPN 트래픽 라우팅

Freebsd의 두 번째 iface로 VPN 트래픽 라우팅

내 Linux 홈 라우터를 FreeBSD로 전환하려고 합니다. 여기에는 두 개의 네트워크 카드가 있습니다. ue0은 인터넷에 연결되고 ue1은 LAN 내부 네트워크에 연결됩니다. eu0에서 VPN 연결을 실행하고 해당 VPN을 통해 모든 ue1 클라이언트를 전달해야 합니다. 따라서 ue1에 연결된 모든 클라이언트는 VPN을 통해 인터넷에 연결되지만 그들은 이 사실조차 알지 못합니다.

    ue0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=80009<RXCSUM,VLAN_MTU,LINKSTATE>
        ether b8:27:eb:9f:19:56
        inet 192.168.1.15 netmask 0xffffff00 broadcast 192.168.1.255
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
    ue1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=8000b<RXCSUM,TXCSUM,VLAN_MTU,LINKSTATE>
        ether 9c:eb:e8:0b:98:ee
        inet 172.16.1.1 netmask 0xffffff00 broadcast 172.16.1.255
        media: Ethernet autoselect (none)
        status: no carrier
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
    tun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1500
        options=80000<LINKSTATE>
        inet 10.8.0.3 --> 10.8.0.1 netmask 0xffffff00
        inet6 fddd:1194:1194:1194::1001 prefixlen 64
        inet6 fe80::ba27:ebff:fe9f:1956%tun0 prefixlen 64 scopeid 0x4
        groups: tun
        nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
        Opened by PID 1499

ue1의 클라이언트는 dnsmasq에서 IP를 가져옵니다. 트래픽 전달자로서 저는 ipfw를 사용할 계획입니다. 실제로 iptables를 사용하여 Linux 상자에서 전달을 구현할 수 있었습니다.

#!/bin/bash
IPTABLES="/sbin/iptables"

#forward between ifaces
$IPTABLES -t nat -A POSTROUTING -o ue0 -j MASQUERADE
$IPTABLES -A FORWARD -i ue0 -o ue1 -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A FORWARD -i ue1 -o ue0 -j ACCEPT

#VPN forwarding
$IPTABLES -t nat -A POSTROUTING -o tun0 -j MASQUERADE
$IPTABLES -A FORWARD -i tun0 -o ue1 -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPTABLES -A FORWARD -i ue1 -o tun0 -j ACCEPT

FreeBSD에서는 VPN 연결 대신 인터페이스 간에 트래픽을 전달할 수 있습니다.

#!/bin/sh
wan="ue0"
lan="ue1"
wan_int="dhcpd"
lan_int="172.16.1.1"
ipfw="/sbin/ipfw -q"

#Reset all rules:
${ipfw} -f flush
${ipfw} -f pipe flush
${ipfw} -f queue flush

${ipfw} add allow ip from any to any via lo0
${ipfw} add deny ip from any to 127.0.0.0/8
${ipfw} add deny ip from 127.0.0.0/8 to any

${ipfw} add divert natd ip from any to any via ue0
${ipfw} add allow ip from any to any

rc.conf

hostname="freebsdPI"
ifconfig_ue0="DHCP"
ifconfig_ue1="inet 172.16.1.1 netmask 255.255.255.0"


#
gateway_enable="YES"
firewall_enable="YES"
firewall_nat_enable="YES"
firewall_logging="YES"
natd_enable="YES"
natd_interface="ue0"


#ntp
ntpd_enable="YES"
ntpdate_enable="YES"
ntpdate_hosts="asia.pool.ntp.org"

##
dnsmasq_enable="YES"
sshd_enable="YES"

IPFW 쇼

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 4887 1225786 divert 8668 ip from any to any via ue0
00500 4940 1237011 allow ip from any to any
65535  992  283655 allow ip from any to any

관련 정보