저는 Debian 전용인 Raspbian을 사용하는 Raspberry Pi를 사용하고 있습니다.
내 서브넷이 안정적인 인터넷 액세스를 얻을 수 있도록 Cox 케이블에 연결된 기본 WiFi 네트워크 라우터에서 유선 라우터로 연결하고 싶습니다.
WiFi-이더넷 브리지여야 합니다.
외부 어댑터와 고이득 안테나를 사용하여 /etc/networks를 USB wlan1의 고정 주소로 설정했습니다. wpa_supplicant가 성공적으로 구성되어 정상적으로 메인 라우터에 로그인할 수 있습니다.
이제 설정되었으므로 비밀번호를 사용하여 외부 wlan1의 올바른 네트워크에 로그인할 수 있습니다. 정적 주소는 /etc/networks에 설정됩니다. 게이트웨이와 네임서버는 괜찮습니다. 웹서핑 등을 할 수 있어요.
누락된 링크는 내 라우터가 내 서브넷을 제공하기 위해 연결할 수 있도록 이를 eth0 포트에 연결하는 것입니다.
라우팅, nat 또는 dhcp와 같은 추가 네트워크 서비스는 필요하지 않습니다. 그냥 단순한 다리입니다.
누구든지 이것을 달성하기 위해 올바른 방향을 알려줄 수 있습니까?
답변1
이더넷에서 Wi-Fi로의 브리지를 구성하려면 다음에서 수행하는 것만큼 간단합니다 /etc/network/interfaces
.
auto eth0
allow-hotplug eth0
iface eth0 inet manual
auto wlan0
allow-hotplug wlan0
iface wlan0 inet manual
auto br0
iface br0 inet static
bridge_ports eth0 wlan0
address 192.168.1.100
netmask 255.255.255.0
IP 주소를 네트워크에 더 적합한 주소로 바꾸십시오.
DHCP를 통한 IP 속성을 선호하는 경우 이를 다음과 같이 변경하십시오.
auto br0
iface br0 inet dhcp
bridge_ports eth0 wlan0
변경한 후 /etc/network/interfaces
Debian을 다시 시작하거나 다음을 실행하세요.
service networking restart
이 구성이 활성화됩니다.
이 구성이 설치되어 있는지 확인해야 합니다 bridge-utils
. 다음 명령을 사용하여 설치할 수 있습니다.
sudo apt install bridge-utils
자세한 내용은 다음을 참조하세요.
원격 AP에 연결하려면 wlan0 인터페이스도 구성해야 하므로 이 구성을 그대로 사용할 수는 없습니다.
추가 참고 사항: eth0과 wlan0을 함께 브리징한다는 것은 일반인의 관점에서 br0이 브리지의 일부를 구성하는 인터페이스를 포함하는 단일 논리적 인터페이스로 표시된다는 것을 의미합니다. 일반적으로 이러한 구성은 둘 다 확장되거나 동일한 네트워크에 속할 때 수행됩니다.
답변2
바라보다https://wiki.debian.org/BridgeNetworkConnections#Bridging_with_a_wireless_NIC
무선 NIC로 브리징 두 개의 유선 이더넷 인터페이스를 브리징할 수 있는 것처럼 이더넷 인터페이스와 무선 인터페이스 간에 브리징할 수도 있습니다. 그러나 대부분의 액세스 포인트(AP)는 소스 주소가 AP에 의해 인증되지 않은 프레임을 거부합니다. Linux는 (나가거나 들어오는 프레임을 수정하지 않고) 투명하게 이더넷 브리징을 수행하므로 ebtables라는 프로그램을 사용하여 이를 수행하기 위한 몇 가지 규칙을 설정해야 합니다.
프록시 ARP 및 라우팅을 사용하는 대체 레이어 3 방법은 BridgeNetworkConnectionsProxyArp를 참조하세요.
ebtables 개요 ebtables는 네트워크 계층이 아닌 OSI 모델 데이터 링크 계층의 MAC 하위 계층에서 실행된다는 점을 제외하면 기본적으로 iptables와 유사합니다. 우리의 경우에는 모든 프레임의 소스 MAC 주소를 변경할 수 있습니다. 이는 전달된 모든 프레임이 AP에 인증된 시스템에서 온 것으로 AP를 속이기 때문에 편리합니다.
...한 쪽에서는 주소 목록을 관리하라는 지시가 계속되는데, 제가 따라갈 수가 없어요.
댓글에 답글: 3을 어디서 얻는지 이해가 안 됩니다. 4의 경우 L1과 L2 사이를 어떻게 나누느냐에 따라 다릅니다. 무선 신호 주위에 "이 WiFi 라디오가 전송될 예정입니다"라는 상자를 그리고 처음 2개의 주소를 포함하고 L1 부분으로 처리하면 됩니다. 세션은 2개의 무선 장치 간에 물리적 연결을 형성한다는 의미입니다. 그러면 L2 주소가 너무 많아도 문제가 없으며 안전하게 2로 돌아갑니다.
나는 ebtables가 이러한 모든 주소를 관리하는 방법을 설명하는 문서에 관심이 있습니다.
답변3
고급 하드웨어와 펌웨어를 사용하는 사람들에게는 허용되는 브리징 솔루션이 작동한다고 들었습니다. 그러나 나에게는 오픈 소스 atheros Qualcomm 칩셋과 결합된 ath9k의 오픈 소스 Linux 펌웨어를 사용하면 위의 답변이 작동하지 않았습니다. 따라서 브리지를 시도하고 "작업이 허용되지 않음" 오류가 발생하면...
WiFi와 이더넷은 레벨 3 패키지 프로토콜이 다르기 때문에 brctl을 포함한 Debianbridge-utils 패키지를 통해 직접 브리지할 수 없습니다. WiFi는 모든 패킷이 다른 소스에서 오고 해당 정보를 포함한다고 가정하지만 이더넷은 그렇지 않습니다. 기만/사기 수법이 존재하지만, 외부인에게는 위협으로 간주되어 차단됩니다.
레벨 3 헤더를 재구축하기 위해 패킷을 가장하는 dnsmasq.service라는 Linux 서비스를 통해 이더넷 헤더를 WiFi 헤더로 변환하여 레벨 3 패킷을 재구축해야 합니다. 앞으로 일어날 일에 대한 선언은 네트워크 주소 변환이라는 프로세스를 사용할 수 있는 Linux iptables를 통해 생성할 수 있습니다.
#!/bin/bash
#
# wifi2eth
#
# Tested on Debian GNU/Linux bullseye/sid system.
# Used to connect a Magic Jack Ethernet device so that I may use a corded telephone through the computer which connects to a cellular to WiFi hot-spot device (the MiFi-8000).
# There are certain numbers which, when dialed out, where I can hear the person I called, but they cannot hear me. The problem was resolved by adding UNTRACKED to the list of packets which should be forwarded from WiFi to Ethernet (the telephone).
# When an incoming packet is marked as UNTRACKED, then the state mechanism is broken. I have no problem yet, but if UNTRACKED is used by a sender which is not part of VOIP, then that will create a browsing problem. I would prefer my computer disrespect UNTRACKED requests.
#
# This program creates a functioning WiFi to Ethernet 'bridge'
#
# Step 0: Reset
{ # the redirect of this block also hides bash -x
sudo ifdown --all
for zUp in $(ip addr show | sed -nEe 's/[0-9]+: ([^:]+).* UP .*/\1/p' | tr '\n' ' '); do
sudo ip link set "$zUp" down # force interface down which ifdown was unable to bring down
done
sudo iptables -F
sudo iptables -t nat -F
sudo systemctl stop dnsmasq.service
sudo systemctl disable dnsmasq.service
} &> /dev/null
sudo ifup --all
sudo ifup wlNet 2>&1 | grep -Ee "^Listening on" -e "^DHCPDISCOVER" -e "^bound to"
if [[ $(ip link show wlNet) = *' state DOWN '* ]]; then
echo "$(tput setaf 1)!!! $(basename "$0"): Could not ifup wlNet !!!$(tput sgr0)"
exit
fi
# Step 1: Create the iptables
aEthernet="enTele" # the Ethernet output I want for magicJack
aWireless="wlNet" # the functioning wireless input
aNext=192.168.2 # the next subnet after 192.168.1
aIp_address="$aNext.1" # use the next subnet to create internal network
aNetmask="255.255.255.0" # the network mask
# aNetwork="$aNext.0" # the external inet representing the internal block
# aBroadcast="$aNext.255" # the broadcast IP
aDhcp_range_start="$aNext.50" # inet addresses to be available in subnet
aDhcp_range_end="$aNext.100" # inet addresses to be available in subnet
aDhcp_time="12h" # address lease duration
sudo iptables --flush
sudo iptables -F
sudo iptables -A FORWARD -i $aWireless -o $aEthernet -m state --state RELATED,ESTABLISHED,UNTRACKED -j ACCEPT
sudo iptables -A FORWARD -i $aEthernet -o $aWireless -j ACCEPT
sudo iptables -t nat -F
sudo iptables -t nat -A POSTROUTING -o $aWireless -j MASQUERADE
# Step 2: Turn on IP forwarding.
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward"
sudo ifconfig $aEthernet $aIp_address netmask $aNetmask
# May also have to uncomment net.ipv4.ip_forward=1 in /etc/sysctl.conf
# Remove possible default route created by dhcpcd.
# Hide error if route does not exist.
sudo ip route del 0/0 dev $aEthernet &> /dev/null
# Step 3: Reconfigure and restart domain name masquerade.
sudo systemctl stop dnsmasq
cat - > /tmp/custom-dnsmasq.conf <<-EOF
interface=$aEthernet
bind-interfaces
server=1.1.1.1
domain-needed
bogus-priv
dhcp-range=$aDhcp_range_start,$aDhcp_range_end,$aDhcp_time
EOF
sudo rm -r /etc/dnsmasq.d/*
sudo mv /tmp/custom-dnsmasq.conf /etc/dnsmasq.d/custom-dnsmasq.conf
sudo systemctl start dnsmasq
# Show off what we did
sudo iptables-save | grep --no-group-separator -e '^-A' -e '^*' | grep -ve '^#'
#################
# End Of Code
#################
#
# The iptables language:
#
# iptables understands ipv4 (ip6tables understand ipv6 (not used))
# apt-get install iptables # comes preinstalled with debian
#
# An iptable stores a chain of rules which redirects packets.
# The first match in a chain determines the packet destination.
# The iptables table name determines when and how the table is used.
# An iptables name is not random or arbitrary.
#
# --table 'filter' is the default and is for firewall creation
# --table 'mangle' is for chaning packet headers (TTL values...)
# --table 'nat' is for routing packets to different hosts via Network Address Translation
# --table 'raw' is a stateful firewall (knows if packet is part of a new or existing connection...)
#
# Chains of a table determine the inspection point.
# PREROUTING chain is for arriving packets in tables 'nat', 'mangle' and 'raw'.
# INPUT is chain for packets going to local process in tables 'mangle' and 'filter'.
# OUTPUT is chain for packets from a process in tables 'raw', 'mangle', 'nat', and 'filter'.
# FORWARD is chain for packets routed through localhost in tables 'mangle', 'filter'.
# POSTROUTING is chain for exiting packets in tables 'nat', 'mangle'.
# MASQUERADE chain...
# When it receives a datagram from a computer on the LAN
# it takes note of the type of datagram it is, "TCP," "UDP," "ICMP," etc.
# and modifies the datagram so that it looks like it was generated by the router machine itself
# and remembers that it has done so.
# It then transmits the datagram onto the Internet with its single connected IP address.
# When the destination host receives this datagram,
# it believes the datagram has come from the routing host and sends any reply datagrams back to that address.
# When the Linux masquerade router receives a datagram from its Internet connection,
# it looks in its table of established masqueraded connections
# to see if this datagram actually belongs to a computer on the LAN,
# if it does, it reverses the modification it did on the forward path
# and transmits the datagram to the LAN computer.
#
# The target of a rule defines what happens to matched packets.
# ACCEPT is the default which forwards or allows the packet.
# DROP acts as if the packet did not exist.
# REJECT responds with an error (then drop).
# LOG creates a kernel log entry (in /var/log/syslog or /var/log/messesages) (then drop).
#
# The iptables interface:
#
# sudo iptables
# -L|--list -v|--verbose list current ip table entries (no --table shows filter table)
# -F|--flush empty all ip table entries (no --table flushes filter table)
# -A|--append creates a new rule
# -j|--jump where to send the packet if the packet matches the rule
# -i|--in-interface where packet must come for for a match
# -o|--out-interface where packet must be going to for for a match
# -m|--match state list,of,states allowed or a match
# note: see man iptables for many other types of matching rules
#
# Packets have a state:
# NEW for the very first packet of a connection
# ESTABLISHED for packets that are part of an existing connection
# RELATED for packets related to another established connection (ftp)
# INVALID for packets whose state is unknown or improper
# UNTRACKED for packets specifically exempted from connection tracking
# DNAT for packets whose destination address was changed by the table
# SNAT for packets whose source address was changed by the table
#
# Anything you block on the INPUT chain, you can’t access either.
# --state RELATED,ESTABLISHED --jump ACCEPT declares "allow existing connections to continue"
#
# Save/restore iptables:
# Once declared, iptables may be saved and restored to/from files of your choice.
# $ sudo iptables-save > iptables.rules # write current rules to configuration file
# $ sudo iptables-restore < iptables.rules # restore rules from configuration file
# $ sudo apt-get install iptables-persistent # package for automated iptables-save/restore
위는 실행 시 NAT 전달 "브리지"를 생성하는 chmod +x가 필요한 프로그램입니다. 다시 시작할 때 "브리지"가 자동으로 생성되지 않습니다.
참고: network-manager, wicd, connman 등과 같은 패키지는 모두 자체 작업을 수행합니다. 이러한 패키지에는 구성, GUI 및 제어 계층이 추가되어 모든 것이 복잡해집니다. 모두 제거하세요. 이 방법은 실제로 필요한 작업을 수행하는 패키지인 dnsmasq, iptables 및 wpasupplicant만 사용합니다. 시스템이 단순할수록 솔루션을 이해하기 쉽고 신뢰성이 높아집니다.
기본 명령:
$ ip addr show # list every network interface and its current situation
$ sudo ifup INTERFACE # raise interface declared in /etc/network/interfaces
$ sudo ifdown INTERFACE # lower interface declared in /etc/network/interfaces
완전한 오픈 소스로 유지되기를 바랍니다.