在Linux中的单个接口上创建WiFi接入点


14

我正在尝试在Linux笔记本电脑上创建WiFi热点或访问点。我正在使用Opensuse Kde 12.3。

我发现了一个名为的软件hostapd,它可以让您创建热点,但是它需要两个接口。一个连接到互联网,另一个连接到您要在其上创建接入点的位置(此处是教程)。我的问题是我没有以太网连接。该wlan接口用于连接到Internet。

有什么方法可以在连接到Internet的同一接口上创建热点(就像Windows上的connectify软件一样)?我当时正在考虑创建一个虚拟接口(就像airmon-ng创建一个用于监视wifi的接口一样)并将其用作第二个接口。这可能吗?

更新

到目前为止,这是我能够做的事情:

1)创建2个接口(一个作为站点,另一个作为接入点)

  iw phy phy0 interface add mySta type station
  iw phy phy0 interface add myAcc type __ap

2)给他们单独的Mac ID

ifconfig myAcc hw ether A4:17:FE:6E:00:53
ifconfig myAcc 192.168.27.1 up

3)在myAcc界面上启动hostapd

4)启动dnsmasq为连接设备提供IP地址

所有这些工作。设备能够连接到该网络并获取IP地址。下一步是提供IP伪装

iptables --table nat --append POSTROUTING --out-interface mySta -j MASQUERADE
iptables --append FORWARD --in-interface myAcc -j ACCEPT

但是mySta界面现在无法连接到Internet。它可以获取Essid,但无法获取IP地址。

命令dhclient mySta不显示任何消息,经过一段时间后出现错误:

ls: cannot access /var/run/netconfig//mySta/: No such file or directory

有人可以弄清楚如何获取IP地址吗?


您是否尝试过将“虚拟网络驱动程序支持”(内核驱动程序)作为模块。我不能为您提供更多帮助,因为我不知道openSUSE。但是我可以看到,使用Yast构建版本11及更高版本时,报告了错误。所以要小心
Diblo Dk

如果可以通过与Gentoo,Debian或Ubuntu中相同的方式(内核配置,网络设置)完成操作,我当然可以为您提供帮助。
Diblo Dk 2013年

任何帮助将不胜感激。我没有使用Yast工具。这些配置来自Ubuntu上的教程。文件系统和配置几乎相同。
adityap174 2013年

您的内核版本是什么?
Diblo Dk

内核:x86_64 Linux 3.7.10-1.16-desktop
adityap174

Answers:


9

对于其他面临此问题的人,问题出在mac地址上。我启动了接入点界面,并为其提供了一个mac地址。然后,在运行hostapd之后,添加站点接口,为其提供一个不同的mac地址,并将其连接到网络,并通过dnsmasq将站点的ip地址作为客户端的默认网关。

现在一切正常。

正如Diblo Dk指出的那样,您可以使用虚拟接口和虚拟接口,但hostapd不能使用它们。我不知道为什么

步骤如下:

  1. 关闭网络管理器服务,因为它会干扰虚拟接口
  2. 使用ifconfig wlan0调低wlan0
  3. 使用iw命令(类型__ap)创建访问点接口,为其分配一个不同的mac和ip地址
  4. 在此访问界面上打开hostapd
  5. 使用dnsmasq在此接口上分配连接客户端,IP地址并提供默认网关作为要创建的工作站接口的IP
  6. 在访问界面上打开dnsmasq。现在,客户端将能够连接到接入点并获取IP地址。
  7. 创建新接口(类型站),为其分配单独的mac地址,并通过分配essid并使用dhclient获得ip地址将其连接到网络。
  8. 如有必要,通过iptables命令执行ip伪装

说穿了,WTF hostapd :)
Diblo Dk

您能否按照自己的确切步骤来更新答案。这绝对是我要保存的答案。
Diblo Dk

更新:)想要更多细节?
adityap174

解决问题的好方法:)
Diblo Dk

您正在使用什么加密狗/芯片组?
Alvin

2

设置虚拟网络

1打开控制台

su -

2看看您是否有虚拟驱动程序

modprobe -l | grep /net/dummy.ko

(!)如果没有虚拟驱动程序,请转到“ 创建内核模块 ”。

3加载虚拟驱动程序

modprobe dummy

(!)如果失败,请勿将其添加到启动中。

4通过放置来测试dummy0

ifconfig dummy0 10.246.75.1 netmask 255.255.255.0 broadcast 10.246.75.255 up

ifconfig

它将为您提供类似的输出。

dummy0  Link encap:Ethernet  HWaddr 00:2D:32:3E:39:3B
        inet addr:10.246.75.1  Bcast:10.246.75.255  Mask:255.255.255.0
        ...

5将虚拟驱动程序添加到启动

编辑内核sys文件。

nano /etc/sysconfig/kernel

并将“ 哑元 ” 添加到MODULES_LOADED_ON_BOOT。

MODULES_LOADED_ON_BOOT = "..."

例如 MODULES_LOADED_ON_BOOT =“ vmcp虚拟”。

6配置dummy0的网络设置

创建ifcfg-dummy0文件。

nano /etc/sysconfig/network/ifcfg-dummy0

添加到ifcfg-dummy0文件:

# Configuration for dummy0
BOOTPROTO=static

# This line ensures that the interface will be brought up during boot.
STARTMODE=onboot

# dummy0 - This is the main IP address that will be used for most outbound connections.
# The address, netmask and gateway are all necessary. The metric is not necessary but
# ensures you always talk to the same gateway if you have multiple public IPs from
# different subnets.
IPADDR=10.246.75.1
NETMASK=255.255.255.0
BROADCAST=10.246.75.255
GATEWAY=10.246.75.1



创建内核模块

1首先安装必要的东西

打开YaST。

导航至Software-> Software Management

蜱:

Development 

[X] Base Development
[X] Linux Kernel Development
[X] C/C++ Development

2返回控制台并导航到内核源

cd /usr/src/linux

3导入当前内核配置

zcat /proc/config.gz > .config

4打开内核menuconfig

make menuconfig

5添加虚拟网络驱动程序支持

导航至Device Drivers->Network device support

* Network core driver support
    M Dummy net driver support

(!)如果“网络核心驱动程序支持”旁边有一个星号,则可以跳过步骤7和9。

6编译内核

make -j(n+1)

其中(n + 1)= CPU内核数量加上一个用于加快编译速度的内核。对于四个内核,请使用make -j5。

7安装新内核

make install

8安装模块

make modules_install

9加载新内核

reboot



定义VIPA(有关加载模块和ifcfg-dummy0的部分):http ://wiki.linuxvm.org/wiki/Defining_a_VIPA
配置静态IP: https : //www.linode.com/wiki/index.php/Configure_Static_IPs
openSUSE 12.3和从kernel.org安装新的Linux内核版本:http : //forums.opensuse.org/blogs/jdmcdaniel3/opensuse-installing-new-linux-kernel-versions-134/
OpenSUSE 11.2-如何为新手编译内核:http : //linuxtweaking.blogspot.dk/2010/04/opensuse-112-how-to-compile-kernel-for.html


感谢您的详细解释。我尝试过这种方法。我能够创建dummy0接口并在启动时启动。但是,如何使它成为无线接口呢?iwconfig给出:dummy0没有无线扩展。hostapd不适用于此功能。它给出了错误:nl80211驱动程序初始化失败
adityap174

是的,问题是您存在IP冲突。但这可以通过伪模块(分配多个IP地址)完成。给我一些时间为您的系统查找它。
Diblo Dk

您也可以在这里查看linode.com/wiki/index.php/Configure_Static_IPs#OpenSUSE可能您可以看到如何处理wlan :)
Diblo Dk

,问题是您将遇到IP冲突*
Diblo Dk

1

创建虚拟界面

创建ifcfg-wlan0:0文件

nano /etc/sysconfig/network/ifcfg-wlan0:0

添加到ifcfg-wlan0:0文件:

DEVICE=wlan0:0

# Configuration for wlan0:0
ONBOOT=yes

# This line ensures that the interface will be brought up during boot.
BOOTPROTO=static

# wlan0:0 - This is the main IP address that will be used for most outbound connections.
# The address, netmask and gateway are all necessary. The metric is not necessary but
# ensures you always talk to the same gateway if you have multiple public IPs from
# different subnets.
IPADDR=10.246.75.1
NETMASK=255.255.255.0
BROADCAST=10.246.75.255
GATEWAY=10.246.75.1

激活界面的命令

ifup wlan0:0

注意:关闭主界面也会同时关闭其所有别名。别名可以独立于其他接口关闭。

检查界面是否正常

ifconfig

它将为您提供类似的输出。

wlan0:0  Link encap:Ethernet  HWaddr 00:2D:32:3E:39:3B
         inet addr:10.246.75.1  Bcast:10.246.75.255  Mask:255.255.255.0
         ...

http://forums.opensuse.org/english/get-technical-help-here/network-internet/461132-os-11-4-network-manager-default-connection-can-handle-virtual-interfaces.html#第2350426章


即使这不适用于hostapd。它给出了相同的错误:无法打开文件/ sys / class / net / dummy0 / phy80211 / name:没有带有dummy0的此类文件或目录,并且无法打开文件/ sys / class / net / wlan0:0 / phy80211 / name:没有带有虚拟接口的此类文件或目录。感谢你的帮助。:)问题出在mac地址上。我已对您的答案进行了投票,并为其他人发布了解决方案。
adityap174
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.